Я не понимаю, как принцип TDD FIRST не соблюдается в следующем коде.
Это мои заметки о принципе FIRST:
- Быстрый: выполнить (подмножество) тестов быстро (так как вы будете запускать их все время)
- Независимый: тесты не зависят от других, поэтому можно запускать любое подмножество в любом порядке
- Повторяемый: выполните N раз, получите тот же результат (чтобы изолировать ошибки и включить автоматизацию)
- Самоконтроль: тест может автоматически обнаруживать, если он прошел (нет проверки человеком на выходе)
- Своевременное: написано примерно в то же время, что и тестируемый код (с TDD, написано первым!)
Вопрос викторины:
Салли хочет, чтобы ее веб-сайт имел специальный макет в первый вторник каждого месяца. У нее есть следующий контроллер и тестовый код:
# HomeController def index if Time.now.tuesday? render 'special_index' else render 'index' end end # HomeControllerSpec it "should render special template on Tuesdays" do get 'index' if Time.now.tuesday? response.should render_template('special_index') else response.should render_template('index') end end
Какой принцип FIRST не соблюдается?
- Fast
- Независимый
- Повторяющиеся
- Самоконтроль
- Своевременное
Я не уверен, какой принцип FIRST не соблюдается:
- Быстрый: код кажется быстрым, потому что в его тестах нет ничего сложного.
- Независимый. Тест не зависит от других тестов.
- Повторяемый. Тест будет получать одинаковый результат каждый раз.
'special_index'
если он вторник и'index'
, если он не во вторник. - Самоконтроль. Тест может автоматически определять, прошел ли он.
- Своевременно. Оба кода и тестовый код представлены здесь одновременно.
Я выбрал Своевременный в викторине, потому что тестовый код был представлен после кода контроллера. Но у меня вопрос неправильный, и в ретроспективе это был не очень хороший выбор. Я не уверен, какой принцип FIRST здесь не соблюдается.