DHH на модульном тестировании: действительно ли RSpec бесполезен?

Я оказался подписчиком Ruby Inside, так как меня особенно интересует Rails. Вчера, создатель Rails, Дэвид Хейнемайер Ханссон, в значительной степени сказал, что он просто использует тест/блок. Я бы понял, что, поскольку он Rails является внутренним, но, похоже, он дал сильное мнение. Он считает, что RSpec и Cucumber бесполезно сложны.

Обычно я не обращал много внимания, но это зависит от того, кто что-то говорит. Я очень уважаю Хансона, и его мнение заставило меня задуматься. Когда я начал работать с Rails, я никогда не смотрел тест/блок. Просто RSpec и огурцы.

И вот почему я хочу твое понимание. Считаете ли вы, что RSpec действительно сложна для небольшой добавленной стоимости? Не требует ли времени или усилий письменного теста/подразделения?

Ответ 1

Моя рекомендация заключалась бы в использовании либо Shoulda (extends Test:: Unit), либо RSpec с Capybara и -no-Oucum.

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

Огурец, я, наконец, пришел к пониманию, более важен, чем обычно. Вы можете выполнить то, что вам нужно более просто и надежно, с помощью простых интеграционных тестов и Capybara. Помните - Capybara!= Огурец, а Capybara вполне способен сам по себе.

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

Кроме того, помните, что Cucumber фактически не требует RSpec, поэтому, если вы хотите продолжать использовать Cucumber, вы можете сделать это только с помощью Test:: Unit. Вариантов много.

Ответ 2

Все о семантике. RSpec и Test:: Unit аналогичны функционально. Лично я всегда предпочитал RSpec, потому что я счел более естественным писать тесты, используя его. Мне также нравится простота написания пользовательских совпадений, и предоставленные по умолчанию сочетания являются полезными.

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

Я работал над проектами, в которых клиент писал сценарии Cucumber вместе с одной из наших команд QA. Как нетехнический человек это чрезвычайно доступный и естественный способ указать пользовательские истории в коде. Огурец действительно помог нам пройти прогулку, когда дело дошло до наших гибких практик. Качество конечного продукта выиграло от этого, но нет, мне не нравится Cucumber как разработчик:)

Ответ 3

Это вопрос личного вкуса.

Мне нравится писать легкие тесты огурца, не беспокоясь о деталях. Просто тестирование "счастливых" путей моего приложения. (портативный, понятный, медленный)

Я оставляю детали Test/Unit. (легко, быстро)

Требуется больше времени для понимания:

get :products, :session => @session_id_for_product_banana
assert_select "table" do
  assert_select "td#name", "Banana"
end

вместо

When I go to the banana page
Then I should see "Banana"

Конечно, те тесты не равны, но кто заботится о том, находится ли "банан" в div или таблице или не имеет правильного html-id.

Мне не нравятся функциональные тесты, потому что после рефакторинга идентификатор может исчезнуть, ожидание сессии может быть изменено. В этом случае вам понадобится реорганизовать ваш код И тесты. Если вы используете огурец, вам не придется менять сценарий.