Курица и яйцо.
Если из-за малой связи невозможно написать несколько достойных модульных тестов, лучшим подходом может быть работа сверху вниз .
Если у вас еще нет тестов Integration, System и GUI, это будет хорошей причиной для их создания до того, как вы начнете создавать модульные тесты. После того, как они у вас есть, вы можете начать рефакторинг кода для создания достойных модульных тестов и при этом быть достаточно уверенным, что ваши всеобъемлющие тесты поймают ваши самые очевидные ошибки.
Обратите внимание, что, по моему личному мнению, эти тестовые случаи должны создаваться так, чтобы их не приходилось изменять, когда вы будете готовы начать создавать модульные тесты и рефакторинг вашего кода.
Об этом следует прочитать Эффективная работа с устаревшим кодом , автор Michael Feathers.
Заключение
Стратегия, которую я изложил, работает для самых разных изменений,
Однако есть некоторые предостережения. Иногда единственный достойный перегиб
точка, которую вы можете найти для набора классов, является системной границей.
В некоторых приложениях граница системы может быть довольно широкой:
включает в себя графический интерфейс, звонки в другие внешние библиотеки, базу данных,
и т.д. В этих случаях лучший способ получить инвариант - это запустить
писать то, что Стив Макконнелл называет «тестами на дым» против остальных
система