The type and nature of the tests that you write in TDD helps you to understand how strongly your system is encapsulated.
Everything the system must do, and yet might not, needs a test. Here, “must do” comes from your stakeholders’ requirements, and is therefore connected to business value. The more your tests are about these issues, the clearer your specification will be.
Everything the system must not do, and yet might, needs a test. Here, “might” means that the unwanted behavior is possible, that it cannot not prevented in some way. Anything that the compiler, linker, etc will catch and report is prevented and does not require a test. If such tests were written, it would be impossible for them to fail.
Weak encapsulation allows for more of these negative behaviors to make it into the executable, where tests are needed to raise the alarm. So the more negative tests you need, the less encapsulation you have achieved.
This is Scott Bain. Visit us at www.netobjectives.com.