Найти тему

Коротко о разработке через тестирование

Добрый вечер! Немного расскажу о своих мыслях про такое понятие в индустрии как "разработка через тестирование". Надеюсь вам покажется занимательным данный текст, ну и может быть даже полезным. Надеюсь на ваши комментарии.

Если вы находите модульное тестирование сложным из-за того, что ваш код трудно тестировать, значит, вы не практикуете разработку через тестирование (TDD). Без TDD вы пишете код, и только после того, как кодирование завершено, вы пишете тесты. На этом этапе вы понимаете, что код не подлежит тестированию (неожиданно, правда?).

С подходом TDD можно сказать, что
тесты управляют дизайном кода:

вы всегда начинаете с теста, а затем пишете код проекта, отличный от необходимого для прохождения теста. Затем вы пишете новый тест. Тогда снова пишете код. И цикл повторяется раз за разом.

Цикл TDD делает невозможным создание кода, который потом будет сложно протестировать. Ваш код всегда будет протестирован, можно сказать еще до его создания.

Но иногда возникает такой вот вопрос:

Что мне следует писать: модульные или «интеграционные» тесты?

Вам нужно написать и то, и другое.

«Интеграционные» тесты можно легко написать, но по мере роста вашего приложения и увеличения количества тестовых примеров, которые вам нужно охватить, тем более медленнее становится работа вашего набора тестов. Таким образом, вы начинаете запускать тесты не после каждой смены строки, а только после завершения функции. Длительная обратная связь делает невозможной работу в коротких циклах TDD.

И теперь вы вынуждены переключиться на подход «тестировать в последнюю очередь», что делает ваш код менее удобным и сложным для модульного тестирования, потому что он не был написан с модульным подходом тестирования - и вам придется еще больше полагаться на интеграционные тесты. Это порочный круг.

Профессиональные программисты тестируют большую часть функциональности с помощью быстрых модульных тестов. Когда это непрактично или требуется больше проверок, то добавляют пару интеграционных тестов (или UI-тестов). По моему опыту, хорошее соотношение между тестами составляет примерно 80/20.

Если вам заинтересовала данная тематика, то вы можете поискать информацию по такому запросу: «Пирамида тестирования», чтобы узнать больше.