Я пытаюсь практиковать TDD.
Мое понимание заключается в том, что TDD должен выглядеть следующим образом
- Напишите тестовый список для интерфейса/класса, который я собираюсь разработать.
- Начните с самого простого не реализованного теста из моего тестового списка.
- Запишите тест, еще не реализованный код.
- Напишите интерфейс класса, чтобы скомпилировать код.
- Запустите тест, в результате чего один из тестов будет неудачным.
- Напишите реализацию, выполняющую тестовый проход.
- Восстановите беспорядок, который я создал.
- Перейти к 2.
Проблема, с которой я сталкиваюсь, - это при написании или выполнении рефакторинга. Я часто прихожу к выводу, что реализация, которую я только что написал, должна быть делегирована другому классу.
Каким должен быть настоящий TDD'r в этот момент?
- Оставьте существующий тестовый список в покое и создайте новый для вновь обнаруженного класса (та же проблема может проявиться при реализации нового класса offcourse).
- Переходите к методу тестирования, основанному на взаимодействии, и отмахивайтесь от нового класса, продолжайте с тестовыми тестами класса, над которым вы работаете, и вернитесь позже, чтобы создать правильную реализацию издевающегося класса.
- Эта ситуация не должна присутствовать. Я, наверное, не очень хорошо продумал свой первоначальный дизайн. (но разве это не победит одну из целей TDD?!).
Мне бы хотелось узнать, как другие люди справляются с этими ситуациями.