Предварительные заметки
Я не буду вдаваться в различие между различными типами тестов, на этих сайтах уже есть несколько вопросов по этому поводу.
Я возьму то, что там, и это говорит: модульное тестирование в смысле «тестирования самого маленького изолируемого модуля приложения», из которого фактически возникает этот вопрос
Проблема изоляции
Какой самый маленький изолируемый модуль программы. Ну, как я понимаю, это (очень?) Зависит от того, на каком языке вы кодируете.
Micheal Feathers рассказывает о концепции шва : [WEwLC, p31]
Шов - это место, где вы можете изменить поведение в вашей программе без редактирования в этом месте.
И не вдаваясь в детали, я понимаю шов - в контексте модульного тестирования - место в программе, где ваш «тест» может взаимодействовать с вашим «модулем».
Примеры
Модульное тестирование - особенно в C ++ - требует от тестируемого кода добавить больше швов , которые будут строго требоваться для данной проблемы.
Пример:
- Добавление виртуального интерфейса, где не виртуальной реализации было бы достаточно
- Разделение - обобщение (?) - (маленький) класс далее "просто", чтобы облегчить добавление теста.
- Разделение проекта с одним исполняемым файлом на кажущиеся «независимыми» библиотеки, просто для облегчения их самостоятельной компиляции для тестов.
Вопрос
Я попробую несколько версий, которые, как мы надеемся, задают один и тот же вопрос:
- Способ, которым требуется модульные тесты для структурирования кода приложения, «только» полезен для модульных тестов, или это действительно выгодно для структуры приложений.
- Является ли обобщение кода, необходимое для того, чтобы сделать его модульным тестируемым, полезным для чего-либо, кроме модульных тестов?
- Вызывает ли добавление юнит-тестов ненужное обобщение?
- Является ли модульное тестирование формы силой кода «всегда» также хорошей формой для кода в целом, как видно из проблемной области?
Я помню эмпирическое правило, которое гласило: не обобщайте, пока вам не понадобится / пока не появится второе место, которое использует код. С юнит-тестами всегда есть второе место, где используется код, а именно юнит-тест. Так достаточно ли этой причины для обобщения?