Szenariogrundriss und Beispiele
Kurz gesagt: Fünf Szenarien, die sich nur im Betrag unterscheiden, werden zu einem Szenariogrundriss mit einer Tabelle der Beispiele: Jede Zeile ist ein eigenes Beispiel. Eine Grundlage enthält den Anfang, den alle Szenarien teilen. Eine Regel fasst die Beispiele unter der Geschäftsregel zusammen, die sie zeigen, wie die grünen Karten unter der blauen.
Problem
Dasselbe fünfmal
Jemand hat die Lieferung mit fünf Szenarien beschrieben. Sie unterscheiden sich nur im Betrag: 30, 49,99, 50, 50,01 und 120 €. Sonst sind sie Zeile für Zeile gleich.
Du liest die Datei und musst fünf Blöcke vergleichen, um zu sehen, was anders ist. Und wenn die Gebühr auf 5,90 € steigt, korrigierst du drei Stellen und vergisst die vierte.
Die Idee
Ein Grundriss und Beispiele
Szenarien, die sich nur in ihren Werten unterscheiden, werden zu einem Szenariogrundriss (scenario outline). An die Stelle der Werte treten Namen in <>, und die Werte stehen in einer Tabelle der Beispiele:
# language: deFunktionalität: Kostenlose Lieferung
Szenariogrundriss: Lieferung bei einer Bestellung von <Betrag> € Angenommen ein Warenkorb von <Betrag> € Wenn ich bestelle Dann beträgt die Lieferung <Lieferung> €
Beispiele: | Betrag | Lieferung | | 30,00 | 4,90 | | 49,99 | 4,90 | | 50,00 | 0,00 | | 120,00 | 0,00 |Jede Zeile der Tabelle ist ein eigenes Szenario. Dieser Grundriss läuft viermal. Fällt er durch, sagt der Bericht, welche Zeile der Beispiele.
Jetzt sieht man die Unterschiede sofort: eine Spalte mit Beträgen und eine Spalte mit der Lieferung. Die Tabelle ist sehr nah an dem, was der Inhaber in einer E-Mail schreibt: „bis 49,99 € zahlt man 4,90 €, ab 50 € nichts“.
Probier es aus
Welche Zeile?
Übung
Ein Grundriss für die Lieferung
1. Von Kopien zu einem Grundriss. Am Anfang stehen drei kopierte Szenarien.
Mach aus den Szenarien für 30 € und 50 € einen Szenariogrundriss mit Beispielen. Füge auch die Zeilen hinzu, die die letzten Fehler abfangen: Die Prüfung sagt dir, wo du suchen sollst.
Lösung
# language: de
Funktionalität: Kostenlose Lieferung
Szenariogrundriss: Lieferung bei einer Bestellung von <Betrag> €
Angenommen ein Warenkorb von <Betrag> €
Wenn ich bestelle
Dann beträgt die Lieferung <Lieferung> €
Beispiele:
| Betrag | Lieferung |
| 30,00 | 4,90 |
| 49,99 | 4,90 |
| 50,00 | 0,00 |
| 120,00 | 0,00 |
Szenario: Ein leerer Warenkorb
Angenommen ein leerer Warenkorb
Wenn ich bestelle
Dann wird die Bestellung abgelehnt
Die zwei neuen Zeilen sind 49,99 € (ein Betrag mit Cent knapp unter der Grenze fängt die Rundung auf ganze Euro ab) und ein Betrag ab 100 € (er fängt den alten Tarif für große Bestellungen ab). Der leere Warenkorb bleibt ein eigenes Szenario: Er hat keine Lieferung, er wird abgelehnt.
Die Idee
Eine Datentabelle
Manchmal braucht ein Schritt mehrere Zeilen Eingabe. Zum Beispiel ein Warenkorb mit mehreren Produkten:
# language: deFunktionalität: Die Summe des Warenkorbs
Szenario: Ein Warenkorb mit zwei Produkten Angenommen ein Warenkorb mit den Produkten: | Produkt | Preis | Stück | | T-Shirt | 20,00 | 2 | | Tasse | 9,99 | 1 | Wenn ich bestelle Dann beträgt die Summe 49,99 €Das ist eine Datentabelle (data table). Sie ist die Eingabe eines Schritts, und das Szenario läuft einmal. Beispiele machen das Gegenteil: Sie wiederholen das ganze Szenario für jede Zeile.
Das Wörterbuch in den Aufgaben hier hat nur einfache Schritte, deshalb ist die Datentabelle nur zum Lesen da.
Die Idee
Grundlage
Beginnen alle Szenarien einer Datei gleich, zum Beispiel mit „der Kunde ist angemeldet“, kann dieser Anfang in eine Grundlage (background) umziehen. Ihre Schritte laufen vor jedem Szenario darunter, als stünden sie darin.
# language: deFunktionalität: Höchstens 10 Stück eines Produkts
Grundlage: Angenommen ein Warenkorb mit 9 Stück des Produkts
Szenario: Das zehnte Stück wird angenommen Wenn ich 1 Stück hinzufüge Dann enthält der Warenkorb 10 Stück des Produkts
Szenario: Zwei weitere werden abgelehnt Wenn ich 2 Stück hinzufüge Dann wird das Hinzufügen abgelehntSei vorsichtig damit. Wer das zweite Szenario liest, sieht nicht, wo es anfängt, ohne nach oben zurückzugehen. Eine Grundlage ist also kurz und enthält nur, was wirklich gemeinsam ist.
Die Idee
Regel
Im Example Mapping sind die blauen Karten die Regeln und die grünen die Beispiele darunter. In Gherkin sagt man dasselbe mit dem Schlüsselwort Regel: Darunter stehen die Szenarien, die sie zeigen.
# language: deFunktionalität: Höchstens 10 Stück eines Produkts
Regel: Der Warenkorb enthält höchstens 10 Stück eines Produkts
Szenario: Das zehnte Stück wird angenommen Angenommen ein Warenkorb mit 9 Stück des Produkts Wenn ich 1 Stück hinzufüge Dann enthält der Warenkorb 10 Stück des Produkts
Regel: Man fügt mindestens 1 Stück hinzu
Szenario: Null Stück ist kein Hinzufügen Angenommen ein Warenkorb mit 5 Stück des Produkts Wenn ich 0 Stück hinzufüge Dann wird das Hinzufügen abgelehntJetzt sagt die Datei nicht nur, was wir prüfen, sondern auch warum. Fällt ein Szenario durch, siehst du sofort, welche Regel gebrochen ist. Jede Regel kann ihre eigene Grundlage haben.
Übung
Die Grenze mit Regeln
2. Zwei Regeln. Die Regeln sind geschrieben, ohne etwas darunter.
Setze unter jede Regel Beispiele (mit einem Grundriss oder mit Szenarien), sodass alle sechs Fehler in der Grenze abgefangen werden.
Lösung
# language: de
Funktionalität: Höchstens 10 Stück eines Produkts
Regel: Der Warenkorb enthält höchstens 10 Stück eines Produkts
Szenariogrundriss: <vorher> im Warenkorb, ich füge <hinzu> hinzu
Angenommen ein Warenkorb mit <vorher> Stück des Produkts
Wenn ich <hinzu> Stück hinzufüge
Dann enthält der Warenkorb <nachher> Stück des Produkts
Beispiele:
| vorher | hinzu | nachher |
| 9 | 1 | 10 |
| 10 | 1 | 10 |
| 5 | 6 | 5 |
Regel: Man fügt mindestens 1 Stück hinzu
Grundlage:
Angenommen ein Warenkorb mit 5 Stück des Produkts
Szenariogrundriss: Ich füge <hinzu> hinzu
Wenn ich <hinzu> Stück hinzufüge
Dann wird das Hinzufügen abgelehnt
Und der Warenkorb enthält 5 Stück des Produkts
Beispiele:
| hinzu |
| 0 |
| -1 |
Die obere Grenze wird von beiden Seiten gesehen: 9 + 1 wird angenommen, 10 + 1 wird abgelehnt. Der Fall 5 + 6 fängt das System ab, das nur die hinzuzufügenden Stück zählt. Nach jeder Ablehnung prüfst du auch, wie viele Stück übrig sind: Sonst sieht niemand, dass der Warenkorb geleert wurde. Auch die untere Grenze hat zwei Seiten: 0 Stück und eine negative Menge sind verschiedene Fehler.
Genauer, für Neugierige
Die Gherkin Reference (Cucumber):
- „Rule“ gibt es in Gherkin seit Version 6. Ihr Zweck ist, eine Geschäftsregel darzustellen, die umgesetzt werden soll;
- „Scenario Outline“ hat ein Synonym, „Scenario Template“. Unter einem Grundriss kann es mehrere Beispiele geben, jedes mit eigenem Namen, zum Beispiel „Um die Grenze herum“ und „Weit von der Grenze“;
- es gibt eine Grundlage pro Funktionalität oder pro Regel. Die Reference rät, sie kurz zu halten: Ist sie länger als 4 Zeilen, gehört ein Teil der Einzelheiten wahrscheinlich in Schritte auf höherer Ebene;
- neben einer Datentabelle kann ein Schritt auch einen längeren Text in
"""tragen (einen Doc String), zum Beispiel den Text einer E-Mail.
Die Zeilen in den Beispielen zu wählen, ist Testentwurf: Äquivalenzklassen und Grenzwerte. Dafür gibt es später ein eigenes Modul. Vorerst gilt die Regel: eine Zeile aus jeder Klasse und eine von jeder Seite jeder Grenze.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: Warum Programme versagen · Akzeptanzkriterien · Example Mapping: Regeln, Beispiele, Fragen · Angenommen, Wenn, Dann
- Geht weiter in: Was, nicht wie · Schlechte Szenarien · Lebendige Dokumentation · Vom Szenario zu den Schritten
- Aufgaben zum Thema: Szenarien mit Gherkin