Я работал так, как ты работаешь. И я не собираюсь говорить вам, что вы не можете. Я предупрежу вас о том, с чем вы можете столкнуться.
Когда каждый модульный тест представляет собой просто модификацию, трудно научиться делать его гибким. Они, как правило, не более чем регрессионные тесты. Поскольку вы никогда не использовали их для рефакторинга, очень легко написать тесты, которые на самом деле затрудняют рефакторинг. Это имеет тенденцию выходить из-под контроля, пока вы не потеряете всю веру в TDD.
Тем не менее, вы уже работаете над чем-то. Я не собираюсь говорить тебе останавливаться. Я скажу, что это может стоить того, чтобы начать что-то еще, что у вас есть время, чтобы исследовать и следовать циклу красно-зеленого рефакторинга с самого начала. Убедитесь, что вы действительно используете тесты для рефакторинга. Пока вы не освоите этот способ работы, используйте его экономно на чем-то важном. Это совершенно другой способ написания кода, к которому нужно привыкнуть. Делать это на полпути никому не поможет.
Что сказал
Я нахожу, что гораздо проще сначала написать интеграционные тесты, работать над кодом, а затем, как только API немного укрепится, фактически работать над добавлением модульных тестов. Типы тестов, которые я могу запускать, так сказать, в своей основной функции, и являются более "сквозными", чем что-либо еще.
Поймите, что модульный тест НЕ является просто тестом, который действует на один класс. Пока API, над которым вы работаете, можно тестировать, не выполняя ни одного из следующих действий, вы прекрасно выполняете модульное тестирование:
- Разговаривает с базой данных
- Общается по сети
- Это касается файловой системы
- Он не может работать одновременно с другими вашими юнит-тестами
- Вы должны сделать специальные вещи в вашей среде (например, редактирование файлов конфигурации), чтобы запустить его.
Майкл Фезерс: набор правил модульного тестирования
Так что если ваш сквозной тест включает более одного объекта, это нормально. Это модульное тестирование, а не объектное тестирование.
Точно так же, как частные методы не нужно проверять больше, чем они проверяются путем тестирования общедоступных методов, которые их используют, объекты не нужно первоначально разрабатывать с использованием собственного средства тестирования. Только когда объекты рассматриваются для использования независимо от сквозной истории, они действительно должны обрабатываться так, как будто у них есть собственный интерфейс и поведение для подтверждения. Если вы будете осторожны с этим, тогда вы сделаете эти объекты публичными. Таким образом, вы не даете никаких обещаний, которые не проверяли.