Как реализовать класс таймера обратного отсчета в TDD?

Я учусь делать TDD на практике в небольшом проекте. Я хочу создать класс таймера обратного отсчета, как реализовать его в TDD (Red, Green, Refactor), и он также имеет обратный вызов делегата.


person Samnang    schedule 17.03.2010    source источник


Ответы (2)


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

Если это так, начните с написания одного из основных тестов, скажем, Start, Stop или Reset. Это ваши события действия, и они будут теми, которые вы вызовете в первую очередь (скорее всего). Сначала закодируйте эти тесты и выполните их. Они должны быть красными, потому что они не могут запускать таймер обратного отсчета.

Затем добавьте фиктивный код к одной из функций вашего таймера обратного отсчета. Например, добавьте функцию Start(), которая запускает таймер обратного отсчета. Пока оставьте функцию пустой. Тест по-прежнему должен быть красным

Теперь нам нужно добавить способ получить текущее оставшееся время. Добавьте свойство «Осталось», где мы можем проверить оставшееся время. Обновите тест, чтобы он зафиксировал это свойство, запустил таймер, а затем снова проверил свойство, чтобы увидеть, изменилось ли оно. Тест должен оставаться красным, так как у нас нет кода для изменения свойства.

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

Теперь пришло время рефакторить. Просмотрите свой код и очистите его. Упростите, где сможете, а затем повторите свои тесты. Если все в порядке, все должно быть зеленым, и вы можете перейти к следующему тесту.

Надеюсь, это поможет.

person GrayWizardx    schedule 17.03.2010

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

person kyoryu    schedule 17.03.2010