Рамка на сценарий и Примери
Накратко: Пет сценария, които се различават само по сумата, стават една Рамка на сценарий с таблица Примери: всеки ред е отделен пример. Предистория държи началото, общо за всички сценарии. Правило групира примерите под бизнес правилото, което показват, както зелените карти под синята.
Проблем
Пет пъти едно и също
Някой е описал доставката с пет сценария. Те се различават само по сумата: 30, 49,99, 50, 50,01 и 120 €. Иначе са едни и същи, ред по ред.
Четеш файла и трябва да сравняваш пет блока, за да видиш кое е различно. А когато таксата стане 5,90 €, поправяш три места и забравяш четвъртото.
Идеята
Рамка и примери
Сценариите, които се различават само по стойностите, стават една Рамка на сценарий (scenario outline). На мястото на стойностите стоят имена в <>, а стойностите са в таблица Примери:
# language: bgФункционалност: Безплатна доставка
Рамка на сценарий: Доставка при поръчка за <сума> € Дадено количка за <сума> € Когато поръчам То доставката е <доставка> €
Примери: | сума | доставка | | 30,00 | 4,90 | | 49,99 | 4,90 | | 50,00 | 0,00 | | 120,00 | 0,00 |Всеки ред от таблицата е отделен сценарий. Тази рамка се пуска четири пъти. Ако падне, отчетът казва на кой ред от „Примери“.
Така разликите се виждат наведнъж: една колона суми и една колона доставка. Таблицата е много близо до това, което собственикът пише в имейл: „до 49,99 € плащаш 4,90 €, от 50 € нищо“.
Пробвай
Кой ред?
Упражнение
Рамка за доставката
1. От копията към рамката. Началото е три копирани сценария.
Направи от сценариите за 30 € и 50 € една Рамка на сценарий с Примери. Добави редовете, които хващат и последните грешки: проверката казва къде да търсиш.
Решение
# language: bg
Функционалност: Безплатна доставка
Рамка на сценарий: Доставка при поръчка за <сума> €
Дадено количка за <сума> €
Когато поръчам
То доставката е <доставка> €
Примери:
| сума | доставка |
| 30,00 | 4,90 |
| 49,99 | 4,90 |
| 50,00 | 0,00 |
| 120,00 | 0,00 |
Сценарий: Празна количка
Дадено празна количка
Когато поръчам
То поръчката е отказана
Двата нови реда са 49,99 € (сума с центове точно под границата хваща закръглянето до цели евро) и сума от 100 € нагоре (хваща старата тарифа за големи поръчки). Празната количка остава отделен сценарий: тя няма доставка, а отказ.
Идеята
Таблица с данни
Понякога една стъпка има нужда от няколко реда вход. Например количка с няколко продукта:
# language: bgФункционалност: Сумата на количката
Сценарий: Количка с два продукта Дадено количка с продуктите: | продукт | цена | брой | | тениска | 20,00 | 2 | | чаша | 9,99 | 1 | Когато поръчам То сумата е 49,99 €Това е таблица с данни (data table). Тя е вход на една стъпка, а сценарият се пуска веднъж. „Примери“ правят обратното: повтарят целия сценарий за всеки ред.
В задачите тук речникът е само с прости стъпки, затова таблицата с данни е само за четене.
Идеята
Предистория
Ако всички сценарии във файла започват с едно и също, например „клиентът е влязъл в профила си“, това начало може да се изнесе в Предистория (background). Стъпките ѝ се изпълняват преди всеки сценарий под нея, сякаш са написани в него.
# language: bgФункционалност: Най-много 10 бройки от продукт
Предистория: Дадено в количката има 9 бройки от продукта
Сценарий: Десетата бройка се приема Когато добавя 1 бройка То в количката има 10 бройки от продукта
Сценарий: Две бройки отгоре се отказват Когато добавя 2 бройки То добавянето е отказаноВнимавай с нея. Който чете втория сценарий, не вижда откъде тръгва, без да се върне нагоре. Затова предисторията е кратка и държи само това, което наистина е общо.
Идеята
Правило
На Example Mapping сините карти са правилата, а зелените са примерите под тях. В Gherkin същото се казва с ключовата дума Правило (rule): под нея са сценариите, които го показват.
# language: bgФункционалност: Най-много 10 бройки от продукт
Правило: В количката има най-много 10 бройки от продукт
Сценарий: Десетата бройка се приема Дадено в количката има 9 бройки от продукта Когато добавя 1 бройка То в количката има 10 бройки от продукта
Правило: Добавя се поне 1 бройка
Сценарий: Нула бройки не е добавяне Дадено в количката има 5 бройки от продукта Когато добавя 0 бройки То добавянето е отказаноСега файлът казва не само какво проверяваме, но и защо. Ако сценарий падне, веднага се вижда кое правило е нарушено. Под всяко правило може да има своя предистория.
Упражнение
Лимитът с правила
2. Две правила. Правилата са написани, под тях няма нищо.
Под всяко правило сложи примери (с рамка или със сценарии), така че да се хванат всичките шест грешки в лимита.
Решение
# language: bg
Функционалност: Най-много 10 бройки от продукт
Правило: В количката има най-много 10 бройки от продукт
Рамка на сценарий: <има> в количката, добавям <добавям>
Дадено в количката има <има> бройки от продукта
Когато добавя <добавям> бройки
То в количката има <след> бройки от продукта
Примери:
| има | добавям | след |
| 9 | 1 | 10 |
| 10 | 1 | 10 |
| 5 | 6 | 5 |
Правило: Добавя се поне 1 бройка
Предистория:
Дадено в количката има 5 бройки от продукта
Рамка на сценарий: Добавям <добавям>
Когато добавя <добавям> бройки
То добавянето е отказано
И в количката има 5 бройки от продукта
Примери:
| добавям |
| 0 |
| -1 |
Горната граница се вижда от двете страни: 9 + 1 се приема, 10 + 1 се отказва. Случаят 5 + 6 хваща системата, която брои само добавяните бройки. След всеки отказ се проверява и колко бройки са останали: иначе не се вижда, че количката се е изпразнила. Долната граница също е от две страни: 0 бройки и отрицателно количество са различни грешки.
По-точно, за любопитните
Справочникът на Gherkin (Cucumber, „Gherkin Reference“):
- „Правило“ (Rule) е в Gherkin от версия 6. Целта му е да покаже едно бизнес правило, което трябва да се направи;
- „Рамка на сценарий“ има и синоним на английски, Scenario Template. „Примери“ могат да са няколко под една рамка, всяка със свое име, например „Около границата“ и „Далеч от границата“;
- предисторията е една на функционалност или на правило. Справочникът съветва да е кратка: ако е повече от 4 реда, подробностите вероятно трябва да станат стъпки на по-високо ниво;
- освен таблица с данни, стъпката може да има и по-дълъг текст в
"""(doc string), например текста на имейл.
Изборът на редове в „Примери“ е тестов дизайн: класове на еквивалентност и гранични стойности. Те имат свой модул по-нататък. Засега правилото е: един ред от всеки клас и по един от двете страни на всяка граница.
Тест
Провери се
Свързани уроци
Раздел „Свързани уроци“- Нужно отпреди: Защо програмите грешат · Критерии за приемане · Example Mapping: правила, примери, въпроси · Дадено, Когато, То
- Продължава в: Какво, не как · Лошите сценарии · Жива документация · От сценарий към стъпки
- Задачи по темата: Сценарии с Gherkin