Komkommer Achtergrond

1. Overzicht

In deze korte tutorial gaan we leren over Cucumber Backgrounds, een functie waarmee we enkele zinnen kunnen uitvoeren voor elke test van een Cucumber Feature.

2. Komkommer Achtergrond

Laten we eerst uitleggen wat de komkommerachtergrond is. Het doel is om een ​​of meer zinnen uit te voeren voor elke test van een functie.

Maar welk probleem proberen we hier op te lossen?

Laten we zeggen dat we een boekhandeltoepassing hebben die we met Cucumber willen testen. Laten we eerst die applicatie maken, die gewoon een Java-klasse zal zijn:

openbare klasse BookStore {privélijstboeken = nieuwe ArrayList (); public void addBook (Boek boek) {books.add (boek); } openbare lijst booksByAuthor (String auteur) {return books.stream () .filter (boek -> Objects.equals (auteur, book.getAuthor ())) .collect (Collectors.toList ()); } openbaar Optioneel bookByTitle (String titel) {return books.stream () .filter (boek -> book.getTitle (). equals (titel)) .findFirst (); }}

Zoals we kunnen zien, is het mogelijk om boeken toe te voegen en te zoeken in de winkel. Laten we nu een paar komkommerzinnen maken om met de boekwinkel te communiceren:

openbare klasse BookStoreRunSteps {privé BookStore-winkel; privélijst gevonden boeken; privé Boek gevonden Boek; @Before public void setUp () {store = new BookStore (); foundBooks = nieuwe ArrayList (); } @Given ("^ Ik heb de volgende boeken in de winkel $") public void haveBooksInTheStore (gegevenstabel) {Lijst rijen = table.asLists (String.class); voor (Lijstkolommen: rijen) {store.addBook (nieuw boek (columns.get (0), columns.get (1))); }} @When ("^ Ik zoek naar boeken op auteur (. +) $") Public void searchForBooksByAuthor (String auteur) {foundBooks = store.booksByAuthor (auteur); } @When ("^ Ik zoek naar een boek met de titel (. +) $") Public void searchForBookByTitle (String-titel) {foundBook = store.bookByTitle (titel) .orElse (null); } @Then ("^ I find (\ d +) books $") public void findBooks (int count) {assertEquals (count, foundBooks.size ()); } @Then ("^ Ik vind een boek $") public void findABook () {assertNotNull (foundBook); } @Then ("^ Ik vind geen boek $") public void findNoBook () {assertNull (foundBook); }}

Met die zinnen kunnen we boeken toevoegen, ernaar zoeken op auteur of titel en controleren of we ze vinden of niet.

Nu is alles klaar om onze functie te creëren. We zoeken boeken op auteur, maar ook op titel:

Feature: Boekwinkel zonder achtergrond Scenario: vind boeken op auteur Gegeven dat ik de volgende boeken in de winkel heb | De duivel in de witte stad | Erik Larson | | De leeuw, de heks en de kleerkast | C.S. Lewis | | In the Garden of Beasts | Erik Larson | Als ik naar boeken zoek op auteur Erik Larson Dan vind ik 2 boeken Scenario: Vind boeken op auteur, maar is er niet Gegeven dat ik de volgende boeken in de winkel heb | De duivel in de witte stad | Erik Larson | | De leeuw, de heks en de kleerkast | C.S. Lewis | | In the Garden of Beasts | Erik Larson | Als ik naar boeken zoek op auteur Marcel Proust Dan vind ik 0 boeken Scenario: Vind boek op titel Gegeven dat ik de volgende boeken in de winkel heb | De duivel in de witte stad | Erik Larson | | De leeuw, de heks en de kleerkast | C.S. Lewis | | In the Garden of Beasts | Erik Larson | Als ik zoek naar een boek met de titel De leeuw, de heks en de kleerkast, dan vind ik een boek Scenario: vind boek op titel, maar is er niet Gegeven dat ik de volgende boeken in de winkel heb | De duivel in de witte stad | Erik Larson | | De leeuw, de heks en de kleerkast | C.S. Lewis | | In the Garden of Beasts | Erik Larson | Als ik zoek naar een boek met de titel Swann's Way, dan vind ik geen boek

Deze functie werkt prima, maar het heeft de neiging om een ​​beetje uitgebreid te zijn omdat we de winkel voor elke test initialiseren. Dit zorgt niet alleen voor veel regels, maar als we de winkel moeten updaten, moeten we dit voor elke test doen. Dat is wanneer komkommerachtergronden handig zijn.

3. Voorbeeld

Dus, hoe maak je een achtergrond om de winkel voor deze functie te maken? Om dit te doen, moeten we het trefwoord gebruiken Achtergrond, geef het een titel zoals we doen voor een Scenario, en definieer de uit te voeren zinnen:

Achtergrond: The Book Store Gezien ik de volgende boeken in de winkel heb | De duivel in de witte stad | Erik Larson | | De leeuw, de heks en de kleerkast | C.S. Lewis | | In the Garden of Beasts | Erik Larson |

Als we dit hebben gedaan, kunnen we deze zin uit de tests verwijderen, zodat ze zich kunnen concentreren op hun specifieke kenmerken:

Scenario: vind boeken op auteur Als ik naar boeken zoek op auteur Erik Larson Dan vind ik 2 boeken Scenario: vind boeken op auteur, maar is er niet Wanneer ik naar boeken zoek op auteur Marcel Proust Dan vind ik 0 boeken Scenario: boek zoeken op titel Als ik zoek naar een boek met de titel De leeuw, de heks en de kleerkast Dan vind ik een boek Scenario: vind een boek op titel, maar is er niet Als ik zoek naar een boek met de titel Swann's Way Dan vind ik geen boek

Zoals we kunnen zien, de scenario's zijn veel korter dan voorheen en de resterende zinnen richten zich op wat we proberen te testen in plaats van op het instellen van de gegevens.

4. Verschil met @Voordat

Laten we nu het verschil bespreken tussen een komkommerachtergrond en de @Voordat haak. De hook stelt ons ook in staat om code uit te voeren vóór een scenario, maar deze code is verborgen voor degenen die alleen de feature-bestanden lezen. Aan de andere kant wordt een achtergrond gemaakt van zinnen die zichtbaar zijn in de feature-bestanden.

5. Conclusie

In dit korte artikel hebben we geleerd hoe we de functie Komkommerachtergrond kunnen gebruiken. Het stelt ons in staat om enkele zinnen uit te voeren voor elk scenario van een functie. We hebben ook het verschil tussen deze functie en de @Voordat haak.

Zoals gewoonlijk is de code voor dit artikel te vinden op GitHub.