Однажды кто-то из инженеров-программистов подумал: если я собираюсь написать кучу тестов для этой программы (класса), то почему бы сначала не написать тесты? С тех пор идёт война между сторонниками и противниками этого подхода - что раньше - курица или яйцо (тесты или программы). Война идёт, а подход сохранился и многими используется. Он называется разработка через тестирование (Test-Driven Development, TDD). Лично я, например, при разработке программ для компьютера, никогда почти не пишу тесты - все глюки устраняются по мере обнаружения. Несмотря на то, что некоторые мои программы достаточно сложные, сбои в них не ведут к каким-то серьёзным неприятностям - никто не умрёт и не потеряет большие деньги. Другое дело, когда я разрабатывал системы управления производством. Здесь я этот подход применял часто. И бывало, что на создание тестов у меня уходило больше времени, чем на создание программ (модулей). Потому что там совсем другое дело - сбой в программе может привести к остановке произ