Добрый вечер! Немного расскажу о своих мыслях про такое понятие в индустрии как "разработка через тестирование". Надеюсь вам покажется занимательным данный текст, ну и может быть даже полезным. Надеюсь на ваши комментарии.
Если вы находите модульное тестирование сложным из-за того, что ваш код трудно тестировать, значит, вы не практикуете разработку через тестирование (TDD). Без TDD вы пишете код, и только после того, как кодирование завершено, вы пишете тесты. На этом этапе вы понимаете, что код не подлежит тестированию (неожиданно, правда?).
⠀
С подходом TDD можно сказать, что тесты управляют дизайном кода:
вы всегда начинаете с теста, а затем пишете код проекта, отличный от необходимого для прохождения теста. Затем вы пишете новый тест. Тогда снова пишете код. И цикл повторяется раз за разом.
⠀
Цикл TDD делает невозможным создание кода, который потом будет сложно протестировать. Ваш код всегда будет протестирован, можно сказать еще до его создания.
Но иногда возникает такой вот вопрос:
Что мне следует писать: модульные или «интеграционные» тесты?
⠀
Вам нужно написать и то, и другое.
«Интеграционные» тесты можно легко написать, но по мере роста вашего приложения и увеличения количества тестовых примеров, которые вам нужно охватить, тем более медленнее становится работа вашего набора тестов. Таким образом, вы начинаете запускать тесты не после каждой смены строки, а только после завершения функции. Длительная обратная связь делает невозможной работу в коротких циклах TDD.
И теперь вы вынуждены переключиться на подход «тестировать в последнюю очередь», что делает ваш код менее удобным и сложным для модульного тестирования, потому что он не был написан с модульным подходом тестирования - и вам придется еще больше полагаться на интеграционные тесты. Это порочный круг.
⠀
Профессиональные программисты тестируют большую часть функциональности с помощью быстрых модульных тестов. Когда это непрактично или требуется больше проверок, то добавляют пару интеграционных тестов (или UI-тестов). По моему опыту, хорошее соотношение между тестами составляет примерно 80/20.
⠀
Если вам заинтересовала данная тематика, то вы можете поискать информацию по такому запросу: «Пирамида тестирования», чтобы узнать больше.