Към съдържанието
wannacode

Рамка на сценарий и Примери

Накратко: Пет сценария, които се различават само по сумата, стават една Рамка на сценарий с таблица Примери: всеки ред е отделен пример. Предистория държи началото, общо за всички сценарии. Правило групира примерите под бизнес правилото, което показват, както зелените карти под синята.

Проблем

Пет пъти едно и също

Някой е описал доставката с пет сценария. Те се различават само по сумата: 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. В „Примери“ за доставката вече има 49,99 € и 50,00 €. Кой ред добавя най-малко?
2. Кое прави таблица с данни (на една стъпка), а не „Примери“?
3. Кое е за „Предистория“?

Упражнение

Рамка за доставката

1. От копията към рамката. Началото е три копирани сценария.

Направи от сценариите за 30 € и 50 € една Рамка на сценарий с Примери. Добави редовете, които хващат и последните грешки: проверката казва къде да търсиш.

GherkinБезплатна доставка

Идеята

Таблица с данни

Понякога една стъпка има нужда от няколко реда вход. Например количка с няколко продукта:

# 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. Две правила. Правилата са написани, под тях няма нищо.

Под всяко правило сложи примери (с рамка или със сценарии), така че да се хванат всичките шест грешки в лимита.

GherkinНай-много 10 бройки от продукт
По-точно, за любопитните

Справочникът на Gherkin (Cucumber, „Gherkin Reference“):

  • „Правило“ (Rule) е в Gherkin от версия 6. Целта му е да покаже едно бизнес правило, което трябва да се направи;
  • „Рамка на сценарий“ има и синоним на английски, Scenario Template. „Примери“ могат да са няколко под една рамка, всяка със свое име, например „Около границата“ и „Далеч от границата“;
  • предисторията е една на функционалност или на правило. Справочникът съветва да е кратка: ако е повече от 4 реда, подробностите вероятно трябва да станат стъпки на по-високо ниво;
  • освен таблица с данни, стъпката може да има и по-дълъг текст в """ (doc string), например текста на имейл.

Изборът на редове в „Примери“ е тестов дизайн: класове на еквивалентност и гранични стойности. Те имат свой модул по-нататък. Засега правилото е: един ред от всеки клас и по един от двете страни на всяка граница.

Тест

Провери се

1. Какво е „Рамка на сценарий“?
2. В рамката има стъпка „Дадено количка за <сумата> €“, а колоната в „Примери“ е „сума“. Какво става?
3. Какво показва „Правило“?
4. Предисторията е станала 9 реда. Какво да направиш?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·