Как я должен создавать классы при выполнении TDD - PullRequest
2 голосов
/ 20 февраля 2012

Я начал делать TDD, и я не уверен, правильно ли я это делаю. Я сделал класс Вопроса и Вопрос-Тест. Класс Question имеет метод addAnswer, который принимает экземпляр класса Answer. Теперь я должен создать только класс Answer и использовать конструктор по умолчанию. Или я должен создать класс Answer, а также предоставить конструктору параметры?

question.addAnswer(new Answer("Some", "Argument that I know I will use")); 

или:

question.addAnswer(new Answer()); 

Это, вероятно, последний, где я пишу столько, сколько мне нужно для продолжения.

Ответы [ 3 ]

1 голос
/ 20 февраля 2012

Что я читаю, так это то, что вы тестируете управление созданием класса Question и во время этого вы решаете, что вам нужно создать класс Answer. Вы хотите написать как можно меньше и отложить создание полного конструктора.

Вместо этого вы можете приостановить написание QuestionTest и начать писать AnswerTest. Проверьте, что вы можете создать ответ требуемым образом (не создавайте конструктор по умолчанию, если ответ требует эти параметры). Проверьте, что после построения ваш ответ ведет себя так, как вы ожидаете. Вы можете утверждать, что получатели возвращают правильные значения, если это тупой класс данных.

Тогда вы можете вернуться к тестированию Вопроса и использовать полный конструктор.

0 голосов
/ 20 февраля 2012

Я не согласен с Эвальдом - «текущая мудрость» говорит, что нет планирование впереди. Просто начните с написания тестов. Тесты определяют поведение ваших классов - реализация «не имеет значения» (независимо от производительности и т. Д.), Пока тесты проходят.

Изначально все ваши тесты не пройдут. Сначала заставьте их пройти (любым способом). Затем рефакторинг. Этот рабочий процесс может быть суммирован с этой мантрой:

  1. красный
  2. зеленый
  3. Рефакторинг

Повторяйте до тех пор, пока вы не будете достаточно счастливы, чтобы зафиксировать свою работу в базе кода.


Что касается конструкторов, если у вас нет окончательных полей, конструкторы не по умолчанию удобны, поэтому не используйте их в тестах - они могут не выдержать рефакторинг / просмотр.

0 голосов
/ 20 февраля 2012

Боб, я считаю, что TDD лучше всего работает для меня, если я планирую все заранее.Это включает в себя выяснение того, какие классы, методы и конструкторы требуются.

Таким образом, ВСЕ мои тесты работают, но они терпят неудачу из коробки.Однако, когда я завершаю код, эти тесты начинают работать.Это немного сложно, но это заставляет вас действительно задумываться о своих тестах и ​​убедиться, что они действительно охватывают все события, которые вы хотите проверить.Частью этого упражнения является определение того, какие данные будут доступны в какое время и какой конструктор должен быть вызван в какое время.

Веселитесь с TDD, здесь нет законов, есть только рекомендации, и, вероятно, лучше всего делать то, что имеет смысл в вашей ситуации.Пока TDD помогает вам лучше понять свои цели и понять, как будет работать приложение, я думаю, вы на правильном пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...