Подтвердить что ты не робот

Принцип TDD FIRST

Я не понимаю, как принцип 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 здесь не соблюдается.

4b9b3361

Ответ 1

Это не Repeatable, так как не каждый день есть вторник:) Если вы запустите этот тест в понедельник, вы получите один результат, если вы запустите его во вторник, другой.

Ответ 2

Независимый и повторяемый

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

Правильный способ проведения теста для HomeController относительно концепции FIRST - изменение времени до этапа оценки

Ответ 3

Да, путаница частично имеет причину, что F.I.R.S.T. принцип не является полным или достаточно кратким в отношении "я". На курсах, которые я посещал, этот принцип назывался F.I.I.R.S.T.

Второй "я" означает "Изолированный". Тест выше не зависит от других тестов, но не изолирован.