2012-02-20 2 views
2

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

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

или:

question.addAnswer(new Answer()); 

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

ответ

1

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

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

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

+0

+1 - первый ответ, который упоминает TestTest. Я думаю, что вопроситель фактически наткнулся на потребность в другом тесте, но не совсем осознал это. Хороший ответ. –

+0

Okey, но я не начинаю писать какое-либо поведение в классе ответов тогда? Только конструктор/геттер/сеттер? – LuckyLuke

0

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

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

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

0

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

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

  1. Красный
  2. Зеленый
  3. Refactor

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


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

+0

Я не согласен, так как я не вижу, как ваши тесты могут быть написаны без какого-либо планирования? Конечно, реализация не важна с точки зрения тестов, но, безусловно, ваши тесты должны знать, ЧТО позвонить и ЧТО делать? Возможно, это случай с TDD, означающий разные вещи для разных людей? – Ewald

+1

Я согласен с богемским ... Я просто пишу свой тест, многие вещи сначала не будут компилироваться, это прекрасно. Позже я буду использовать свою среду IDE для создания необходимых классов и создания методов по мере необходимости. Затем я буду рефакторировать снова и снова, пока все тесты не скомпилируются, а затем запустите их. – smox

Смежные вопросы