135

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

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

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

+11

Как всегда * каждый * * одиночный вопрос * Закрытый вопрос, который я встречаю, закрыт как «неконструктивный» Билл Ящерица, и в то же время вопрос повторяется много раз! ?! что мне не хватает? –

+3

Я полностью согласен. Я все еще очень смущен, где можно задать такие вопросы, как «Лучшая практика XXX». – Dean

+2

Я согласен, у меня есть хорошие вопросы с проницательными, полезными ответами все время на SO, которые были закрыты по той или иной причине. –

ответ

114

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

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

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

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

+5

Вы сталкиваетесь с двумя отдельными проблемами; 1) хорошо ли проводить интеграцию и приемочное тестирование, а 2) огурец - хороший инструмент для написания этих тестов. Для 1 - да, это, безусловно, хорошая идея. Для 2, реже, более эффективно для команды разработчиков писать тесты на языке с такой большой косвенностью, когда вы можете написать очень четкую интеграцию и приемочные тесты в rspec и capybara (или - не дай бог мы могли бы исследовать стандартную библиотеку Ruby - тест/единица или minitest, вместе с capybara). См. Сообщение, которое Джек Кинселла ссылается ниже. –

8

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

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

+2

Точно. Огурец описывает использование вашего приложения. Например. «Я нажимаю здесь, и я ожидаю получить тот или иной результат». Спецификации больше на уровне «модели». Например, когда я вызываю эти методы с такими-то параметрами, я ожидаю, что он вернет этот результат. – Ariejan

26

Think его как цикл:

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

+1

Существует очень хороший пример цикла [Outside-in BDD] (http://www.sarahmei.com/blog/2010/05/29/outside-in-bdd/). – rdamborsky

2

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

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

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

+2

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

+1

Справа. И в большинстве случаев, Cucumber - лучший способ написать интеграционные тесты. –

6

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

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

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

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

20

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

+0

Я прочитал вашу статью и, будучи поклонником огурца, должен сказать, что согласен со многими моментами, которые вы цитируете в своей статье. Хотя, я все еще думаю, что огурец - хороший способ формализовать тесты и сделать их легко читаемыми посторонними. – huug

+0

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

+3

huug - Возможно, это хороший способ подвергнуть испытания «аутсайдерам», но вы показываете мне нетехнического члена команды, который хочет прочитать тесты, и я покажу вам команду, которая тратит свой бюджет. Кроме того, мне еще предстоит работать с нетехническим участником проекта, который хотел бы тратить время на чтение тестов. Я не знаю, может быть, мне повезло ... –

Смежные вопросы