For the full description, implementation variations, consequences, and detailed sample, see Page 263 in Java Application Architecture.
Each module should have a corresponding test module.
Writing tests is one of the most important activities you should perform as a developer. Create a robust suite of tests has significant advantages, both long and short term. Short term, tests help you verify that the code you write does as you intend. Creating tests also helps you design your system. Since classes should be independently testable, a natural by-product of test driven development is that your classes will exhibit lower degrees of coupling. Testing classes independently is valuable, but it’s also valuable to test the integration aspect of multiple classes or modules.