Является ли Cucumber просто оболочкой rspec для организации тестов на функции? - PullRequest
5 голосов
/ 14 января 2011

Просто хочу убедиться, что я все понимаю.

Из того, что я понял, Cucumber - это просто «обертка» или хороший способ упорядочить свои тесты, разделив вещи на функции и этапы, где фактические модульные тесты находятся на стадии этапов.

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

Это правильно?

Ответы [ 4 ]

6 голосов
/ 15 января 2011

Сортировка.

- это способ организации тестов, но это не так. Он ведет себя так, как предполагалось в оригинальных интеграционных тестах Rails, но его гораздо проще использовать. Большой выигрыш в том, что ваша сессия поддерживается прозрачно на протяжении всего Scenario.

Еще одна вещь, которая происходит с Cucumber - это то, что вы (должны быть) тестируете с точки зрения браузера или клиента, использующего ваш код. Если вы хотите, вы можете использовать шаги для создания объектов и установки состояния, но обычно вы хотите, чтобы ваши шаги проходили через движения, необходимые для достижения этого состояния.

Например, вы могли бы сделать это:

Given /I have a user account/ do
  @user = Factory.create(:user)
  # ... more user set up
end

Но вы, вероятно, должны сделать что-то вроде этого:

Given /I have a user account/ do
  visit new_user_url
  fill_in "user_login", :with => "some name"
  fill_in "user_password", :with => "foo"
  # ... whatever else your sign up page needs
end

И, конечно, вы можете передать аргументы любому из этих шагов, чтобы дать вашему вызывающему коду более детальный контроль над поведением шага.

То, что я обычно делал со своими тестами, выглядит следующим образом.

  1. Я использую musta, но с rspec тоже все хорошо.
  2. Я пишу свои тесты с отрицательной аутентификацией (т. Е. Ожидается отказ в доступе) как функциональные тесты Rails.
  3. Я пишу свои тесты с положительной аутентификацией (т. Е. Пользователи делают то, что должны делать) в качестве функций Cucumber.

И, конечно, я до сих пор пишу модульные тесты Rails для своих моделей, библиотек, помощников и т. Д.

2 голосов
/ 15 января 2011

Мне нравится Cucumber, потому что он описывает что такое поведение без описания как это реализовано.Cucumber в основном отделяет спецификацию (которая также является исполняемым приемочным / регрессионным тестом) от реализации.Определения шагов - это адаптер между спецификацией и тестируемой системой, который обеспечивает разделение.

Можно также утверждать, что Cucumber дает вам более удобочитаемую спецификацию, чем RSpec или другие синтаксисы на основе Ruby, которыеможет быть понят (даже написан) клиентом, не являющимся программистом.

1 голос
/ 15 января 2011

Я бы сказал, что вы понимаете, что неверно .

Этапы юнит-теста и огурца - совершенно разные и в значительной степени не связанные вещи.

Тесты на огурец являются комбинацией интеграционных / приемочных тестов и, как таковые, должны быть независимыми от фактической реализации в коде. Таким образом, теоретически вы можете полностью переписать свое приложение на другом языке, и ваши тесты на огурец и, возможно, шаги будут полезны, если вы не изменили поведение своих приложений. Модульные тесты, с другой стороны, тесно связаны с кодом, тестируют такие вещи, как возвращаемые значения вызовов конкретных методов, крайние случаи, связанные со структурами данных и т. Д. Измените метод, и вам придется изменить свой модульный тест.

Есть несколько хороших скринкастов, в которых рассказывается об использовании Cucumber и RSpec для сборки / тестирования вашего приложения извне. Вот несколько примеров, которые помогут вам начать лучше понимать, как интеграционные и модульные тесты могут сочетаться друг с другом:

http://blog.josephwilk.net/ruby/outside-in-development-with-cucumber-and-rspec.html

http://rubyconf2008.confreaks.com/rspec-and-cucumber.html

http://confreaks.net/videos/72-mwrc2009-bdd-with-cucumber

Мое личное использование Cucumber немного еретично в том смысле, что я часто использую просто cucumber в небольших проектах, поскольку он заменяет однообразие запуска и повторного запуска сценариев, которые просто не настолько важны, чтобы выполнять разработку на основе полного модульного теста. Однако это определенно не консенсус сообщества (по крайней мере, публично) о том, как что-то делать.

0 голосов
/ 15 января 2011

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

Спецификации RSpec обычно пишутся по одному по мере развития кодовой базы. Мы указываем следующее небольшое поведение класса, который мы сейчас пишем.

Сравните это с огурцом, где мы пишем набор сценариев, которые являются не более чем примером того, как система будет использоваться конечным пользователем. Как правило, большинство сценариев написаны до начала разработки, и они служат для определения того, какую функциональность должна содержать функция. В Agile-среде функция считается функционально завершенной, когда все сценарии проходят.

В небольших магазинах разработчики пишут как характеристики / сценарии Cucumber, так и спецификации RSpec. В крупных магазинах эти действия делятся между разработчиками, которые пишут спецификации, а владельцы продуктов и тестеры пишут и автоматизируют сценарии.

...