RSpec проти огірка (історії RSpec) [закрито]


136

Коли я повинен використовувати характеристики для застосування Rails та коли огірок (колишній rspec-історій)? Я знаю, як працюють і активно використовують специфікації, звичайно. Але все одно дивно вживати огірок. Моя теперішня думка щодо цього полягає в тому, що зручно використовувати Cucumber, коли ви реалізуєте додаток для клієнта і не розумієте, як повинна працювати вся система.

Але що робити, якщо я роблю власний проект? Більшу частину часу я знаю, як взаємодіють частини системи. Все, що мені потрібно зробити, - це написати купу одиничних тестів. Які можливі ситуації, коли мені тоді знадобиться Огірок?

І, як відповідне друге питання: чи потрібно писати специфікації, якщо я пишу огіркові історії? Чи не було б подвійне тестування одного і того ж?


12
Яким чином кожен одиночний [Closed] питання , який я зустрічаю закритий , як «не конструктивні» Білл Ящірка І в той же час питання upvoted багато разів!?! що я пропускаю?
Ашкан Х. Назарій

4
Я цілком погоджуюся. Я все ще дуже розгублений, де розміщувати питання типу "яка найкраща практика робити XXX".
Дін

3
Я погоджуюсь, я натрапляю на гарні запитання з проникливими, корисними відповідями весь час на ПЗ, які були закриті з тих чи інших причин.
Рассел Сілва

Я знайшов це питання в 2017 році, оскільки воно все ще актуальне, і все ще чудове запитання, з великими відповідями. Це також не викликає думки, оскільки розглядаються рамки були розроблені переважно одними і тими ж людьми для двох абсолютно окремих проблем ... але вам знадобиться трохи досвіду, щоб це знати.
Lunivore

Відповіді:


114

Якщо ви ще цього не зробили, ви можете перевірити чудову статтю Дена Норта " Що в історії"? як відправна точка.

У нас є дві основні сфери використання огіркових історій. По-перше, оскільки форма розповіді дуже специфічна, вона допомагає зосередити артикуляцію власника продукту на особливостях, які він хоче побудувати. Це використання розповідей "жетон для бесіди", і було б корисно, чи ми реалізували розповіді в коді чи ні. По-друге, коли процес працює досить добре, що ми маємо повноцінні історії, перш ніж ми починаємо писати цю функцію (більше ідеал, до якого ми прагнемо, ніж щоденна реальність), у вас чітко прописані критерії прийняття, і ви точно знаєте, що і як багато чого будувати.

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

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


6
Ви плутаєте два окремих питання; 1) чи добре робити інтеграційне та приймальне тестування; 2) огірок - хороший інструмент для написання цих тестів. Для 1 - так, це, очевидно, хороша ідея. Для двох, рідко, команді розробників ефективніше писати тести мовою з такою великою кількістю непрямості, коли ви можете писати дуже розбірливі тести на інтеграцію та прийняття в rspec та capybara (або - не дай бог, ми могли б дослідити стандартну бібліотеку Рубі - тест / одиниця або мінімум, разом з капібарою). Дивіться публікацію, на яку посилається Джек Кінселла нижче.
Грем Ештон

Повністю згоден з тобою, Ебі! Інтеграція огірків життєво необхідна!
dpapadopoulos

26

Подумайте про це як про цикл:

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


1
Є дуже приємний приклад циклу BDD .
rdamborsky

21

Я вважаю, що в більшості ситуацій погано використовувати огірок через витрати на продуктивність, які виникає на вашому синтаксисі. Я багато писав на цю тему в « Чому турбуватися огірковими тестами»?


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

1
Джек - фантастичний пост. Велике спасибі за його написання, ви врятували мені клопоти зробити це самостійно.
Грем Ештон

3
huug - Це може бути хорошим способом викрити тести "стороннім людям", але ви покажете мені нетехнічного члена команди, який хоче прочитати тести, і я покажу вам команду, яка витрачає свій бюджет. Крім того, я ще працюю з нетехнічним членом проекту, який хотів би витрачати свій час на тестування читання. Я не знаю, можливо, мені пощастило ...
Грехем Ештон

Захищений. Я вважаю, що опис функцій користувача в термінах користувача корисно для мене, як розробника, незалежно від того, чи користувачі коли-небудь читали мої історії з огірків. Ось чому я використовую Огірок у всіх своїх проектах і закликаю інших робити так само.
Marnen Laibow-Koser

8

Історія з огірком - це скоріше опис загальної проблеми, яку вирішує ваша програма, а не, якщо працюють окремі біти коду (тобто одиничні тести).

Як описує Abie, це майже перелік вимог, яким повинна відповідати програма, і це дуже корисно для спілкування з вашим клієнтом, а також безпосередньо перевіряється.


2
Саме так. Огірок описує використання вашої програми. Наприклад, "Я натискаю тут, і я сподіваюся отримати той чи інший результат". Характеристики більше на рівні "моделі". Мовляв, коли я називаю ці методи з такими і такими параметрами, я очікую, що він поверне цей результат.
Ariejan

6

Сьогодні ви можете використовувати rspec з Capybara та Selenium Webdriver і уникати необхідності створювати та підтримувати всі аналізатори історії огірків. Ось що я рекомендував би:

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

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

Крім того, щойно ви знайдете свою канавку, вам буде найприємніше розвиватися за допомогою BDD, до цього часу не відчувайте себе винним, якщо ви не відчуваєте, що робите це ідеально і не думайте про це. Ви зробите чудово!


2

Але що робити, якщо я роблю власний проект? Більшу частину часу я знаю, як взаємодіють частини системи. Все, що мені потрібно зробити, - це написати купу одиничних тестів. Які можливі ситуації, коли мені тоді знадобиться Огірок?

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

Іншими словами, вам потрібні огіркові історії з тих же причин, що і вам потрібні одиничні тести - вони просто працюють на більш високому рівні абстракції.


2
Я б не сказав, що огірок був важливим, але ви, звичайно, повинні мати якісь інтеграційні тести, оскільки одиничні тести зазвичай використовуються лише для тестування класів у відриві.
Енді Вейт

1
Правильно. І в більшості випадків огірок - це найприємніший спосіб написання інтеграційних тестів.
Marnen Laibow-Koser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.