RSpec против Cucumber (истории RSpec)

Когда мне следует использовать спецификации для приложения Rails, а когда - Cucumber (ранее - rspec-stories)? Я, конечно, умею и работаю, и активно пользуюсь спецификациями. Но использовать огурец все равно кажется странным. Мое текущее мнение по этому поводу заключается в том, что Cucumber удобно использовать, когда вы реализуете приложение для клиента и еще не понимаете, как вся система должна работать.

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

И, как соответствующий второй вопрос: должен ли я писать спецификации, если я пишу рассказы о Cucumber? Разве это не было бы двойным тестированием одного и того же?


person snitko    schedule 26.12.2008    source источник
comment
Почему так получилось, что каждый отдельный [закрытый] вопрос, с которым я сталкиваюсь, закрыт как неконструктивный Ящерица Биллом И в то же время за этот вопрос проголосовали много раз!?! что мне не хватает?   -  person Ashkan Kh. Nazary    schedule 22.07.2013
comment
Я абсолютно согласен. Я все еще не понимаю, где размещать вопросы, например, как лучше всего делать XXX.   -  person Dean    schedule 14.08.2013
comment
Я согласен, я все время сталкиваюсь с хорошими вопросами с проницательными, полезными ответами на SO, которые были закрыты по той или иной причине.   -  person Russell Silva    schedule 14.08.2013
comment
Я нашел этот вопрос в 2017 году, потому что он по-прежнему актуален и по-прежнему остается отличным вопросом с отличными ответами. Это также не вызывает мнения, поскольку рассматриваемые фреймворки были разработаны в основном одними и теми же людьми для двух совершенно разных задач ... но вам понадобится немного опыта, чтобы это знать.   -  person Lunivore    schedule 29.11.2017


Ответы (6)


Если вы еще этого не сделали, вы можете прочитать отличную статью Дэна Норта Что в истории? в качестве отправной точки.

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

В нашей работе с Rails истории Cucumber не заменяют модульные тесты rspec. Эти двое идут рука об руку. На практике модульные тесты, как правило, стимулируют разработку моделей и контроллеров, а истории, как правило, стимулируют разработку представлений (мы стараемся не писать rspec для наших представлений) и обеспечивать хорошее тестирование приложения в целом с самого начала. точка зрения пользователя.

Если вы работаете в одиночку, коммуникационный аспект может быть для вас не таким интересным, но интеграционное тестирование, которое вы получаете от Cucumber, может быть вам интересным. Если вы воспользуетесь преимуществами webrat, написание Cucumber может быть быстрым и безболезненным для многих из ваших базовый функционал.

person Abie    schedule 09.01.2009
comment
Вы смешиваете две отдельные проблемы; 1) хорошо ли проводить интеграционное и приемочное тестирование; 2) огурец - хороший инструмент для написания этих тестов. Для 1 - да, это определенно хорошая идея. Для 2 редко бывает более эффективным для команды разработчиков писать тесты на языке с таким косвенным обращением, когда вы можете написать очень разборчивые интеграционные и приемочные тесты в rspec и capybara (или - не дай бог, мы могли бы исследовать стандартную библиотеку Ruby - test / unit или minitest вместе с капибарой). См. Сообщение, на которое Джек Кинселла ссылается ниже. - person Graham Ashton; 23.07.2012
comment
Полностью согласен с тобой, Эби! Интеграция с огурцом жизненно необходима! - person dpapadopoulos; 21.01.2019

Думайте об этом как о цикле:

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

person Josiah Kiehl    schedule 02.03.2010
comment
Есть очень хороший пример цикла Outside-in BDD. - person rdamborsky; 29.11.2012

Я считаю, что использовать Cucumber в большинстве ситуаций - плохая идея из-за затрат на производительность, связанных с его синтаксисом. Я подробно писал по этой теме в Зачем возиться с огурцом Тесты?

person Jack Kinsella    schedule 27.09.2011
comment
Я прочитал вашу статью и, как поклонник огурца, должен сказать, что согласен со многими пунктами, которые вы цитируете в своей статье. Хотя я по-прежнему считаю, что огурец - хороший способ формализовать тесты и сделать их легко читаемыми для посторонних. - person huug; 12.10.2011
comment
Джек - фантастический пост. Большое спасибо за то, что написали это, вы избавили меня от необходимости делать это самому. - person Graham Ashton; 23.07.2012
comment
huug - Это может быть хороший способ показать тесты посторонним, но вы покажете мне нетехнического члена команды, который хочет прочитать тесты, и я покажу вам команду, которая тратит свой бюджет впустую. Кроме того, мне еще предстоит работать с нетехническим участником проекта, который хотел бы тратить свое время на чтение тестов. Не знаю, может, мне повезет ... - person Graham Ashton; 23.07.2012
comment
Проголосовали против. Я считаю, что описание пользовательских функций в терминах пользователя полезно для меня, как разработчика, независимо от того, читали ли пользователи мои истории о Cucumber. Вот почему я использую Cucumber во всех своих проектах и ​​призываю других поступать так же. - person Marnen Laibow-Koser; 23.07.2019

История Cucumber - это больше описание общей проблемы, которую решает ваше приложение, а не того, работают ли отдельные фрагменты кода (например, модульные тесты).

Как описывает Аби, это почти список требований, которым должно соответствовать приложение, и он очень полезен для общения с вашим клиентом, а также для непосредственного тестирования.

person Dave Glassborow    schedule 01.07.2009
comment
Точно. Cucumber описывает использование вашего приложения. Например. Щелкаю здесь и рассчитываю получить тот или иной результат. Технические характеристики больше на «модельном» уровне. Например, когда я вызываю эти методы с такими-то параметрами, я ожидаю, что он вернет этот результат. - person Ariejan; 09.09.2009

В настоящее время вы можете использовать rspec с Capybara и Selenium Webdriver и избежать необходимости создавать и поддерживать все парсеры историй Cucumber. Вот что я бы порекомендовал:

  1. Напиши свою историю
  2. Используя RSpec, я бы создал тест интеграции ex: spec / integrations / socks_rspec.rb
  3. Затем я бы создал интеграционный тест, который включает новое описание и блок для каждого сценария.
  4. Затем я бы реализовал минимальную функциональность, необходимую для прохождения теста интеграции, и, возвращаясь глубже (к контроллерам, моделям и т. Д.), Я бы использовал TDD для контроллеров и моделей.
  5. Когда вы вернетесь, ваш интеграционный тест должен пройти, и вы сможете продолжать добавлять шаги к интеграционному тесту.
  6. повторение

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

Кроме того, как только вы найдете свой ритм, вам будет очень приятно развиваться с помощью BDD, до тех пор не чувствуйте себя виноватым, если вы не чувствуете, что делаете это идеально, и не задумывайтесь над этим. У тебя все получится!

person PeppyHeppy    schedule 09.08.2011

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

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

Другими словами, вам нужны истории Cucumber по тем же причинам, что и модульные тесты - они просто работают на более высоком уровне абстракции.

person Marnen Laibow-Koser    schedule 15.12.2010
comment
Я бы не сказал, что Cucumber был необходим, но у вас обязательно должны быть какие-то интеграционные тесты, поскольку модульные тесты обычно используются только для тестирования классов изолированно. - person Andy Waite; 07.05.2011
comment
Правильно. И в большинстве случаев Cucumber - лучший способ писать интеграционные тесты. - person Marnen Laibow-Koser; 17.05.2011