Забыл в прошлом посте упомянуть еще одну важную функцию модульных тестов – они заставляют нас думать. Ведь мало просто написать код, им еще придется пользоваться. И тесты позволяют более грамотно и осмыслено подходить к проектированию интерфейсов классов и сигнатур методов.
У многих на слуху такая методика экстремального программирования TDD – Test Driven Development – разработка через тестирование. Я не являюсь ее фанатом, но иногда действительно имеет смысл в первую очередь продумать как в будущем будет использоваться класс, а только потом концентрироваться на деталях реализации.
Используя программирование через тесты ты заставляешь себя продумать на базовом уровне, что должен делать твой код, а как это сделать оставляешь на потом. Плюс это весьма неплохо повышает покрытие тестами твоего кода. Главное не переборщить и не начать писать тесты ради тестов. Всё хорошо в меру.
Если программист задумывается о том, каково будет в дальнейшем пользоваться его кодом, это существенно повышает его качество (как программиста, так и кода). Поэтому, как писал Максим Дорофеев в одной из моих любимых книг «Джедайские техники»: «В любой непонятной ситуации – думай!», а тесты подтолкнут тебя к этому.