Unit test cases embody characteristics that are critical to the success of the unit.
When software is developed using a test-driven approach, the combination of writing the unit test to specify the interface plus the refactoring activities performed after the test is passing, may take the place of formal design.