Test driven development is something that separates programmers from developers, but until recently there was little literature beyond "write a failing test, write the code, refactor." Within the past few months two books have appeared that systemise good practice : "The Art of Unit Testing" by Osherove is an great introduction to the subject, and this book an excellent continuation. It is an exploration of how responsible developers should think, and how testing helps clarify design intentions, not just keep code working. It is especially strong on the "granularity" of the tests, that is what acceptance tests are saying at a "macro" level, and what unit tests are saying at a "micro" level. It is advanced, but by no means daunting. I reckon that about 50% of this I agreed with and was doing already, the remaining 50% I agreed with.
For those that are concerned about this sort of thing, note that all the code examples are in Java and the anciliary testing and mocking applications are Java-centric. They are written clearly enough for a pure C# developer like me to follow and translate into C# and nUnit.