I can recommend a few. You can probably feel comfortable starting with any of them.
- Beck, _Test-Driven Development: By Example_
- Koskela, _Test-Driven_
- Jeffries, _Extreme Programming Adventures in C#_
tdd.training
- Freeman & Pryce, _Growing Object-Oriented Software Guided by Tests_
- Fowler, _Refactoring_
"Is evolutionary design compatible with a plugin architecture? What happens when clients can write their own plugins?"
I will interpret this question as "how can we safely guide the design to evolve when we must publish some APIs to the general public?"
Details: When testing code in isolation, it usually becomes convenient to inject dependencies. When removing duplication, it frequently happens that I see common workflows. These two forces combine to push the design the direction of the Template Method pattern.
1. It is stable (because it is very abstract) and
2. It is easy to write contract tests for it.
With that, I have finally finished this thread... unless there are follow-up questions. :)