Описание: Пишите тесты до того, как вы напишете код. Если писать тесты до кода, это поможет думать больше о дизайне и стать более сфокусированным на задаче.

Что все это значит на самом деле?

Test-First программирование способствует написанию тестов для продакшн кода до того, как вы напишете этот продакшн код. Вместо подхода “я напишу этот тест позже” (на самом деле нет), то мы сначала пишем тест.

Для каждого кусочка функциональности продакшн кода мы создаем маленький (в идеале очень маленький) сфокусированный тест который определяет и проверяет что должен делать код. Такой тест может быть и не компилируемым по-началу, потому что на этот момент мы можем не иметь всех нужных нам классов и методов. Однако он функционирует как своего рода исполняемая спецификация. Затем мы должны сделать минимально усилий, чтобы этот тест стал компилируемым, запустить его и сразу же убедиться в том, как тест стал красным. И после всего этого мы пишем минимальное количество кода, который сделает тест успешным.

Преимущества паттерна:

  • Кому данный паттерн покажется странным, но тщательный набор таких юнит-тестов служат своего рода рыболовной сетью для дефектов. Они точно определяют текущее поведение системы. Хорошие Test-first команды обнаруживают, что на протяжении всего жизненного цикла системы они выявляют значительно меньшее количество дефектов и тратят гораздо меньше времени на отладку.
  • Так же, хорошо написанные юнит-тесты по определению служат отличной дизайн документацией, которая всегда синхронизирована с текущей кодовой базой.
  • И наконец, еще одним преимуществом хорошо структурированных юнит тестов — это рефакторинг. Если во время рефакторинга мы нечаянно что-то сломали, то тесты сразу известят нас об этом, но при этом нельзя забывать об одном правиле: пишите тесты, которые быстро выполняются и запускайте их как можно чаще и чаще.