Agurk baggrund

1. Oversigt

I denne korte vejledning lærer vi om agurk baggrunde, som er en funktion, der giver os mulighed for at udføre nogle sætninger for hver test af en agurkfunktion.

2. Agurk baggrund

Lad os først forklare, hvad agurkbaggrunden er. Dens formål er at udføre en eller flere sætninger før hver test af en funktion.

Men hvilket problem prøver vi at løse her?

Lad os sige, at vi har en boghandlingsapplikation, som vi vil teste med agurk. Lad os først og fremmest oprette den applikation, som simpelthen vil være en Java-klasse:

public class BookStore {private List books = new ArrayList (); public void addBook (Bogbog) {books.add (bog); } public List booksByAuthor (String author) {return books.stream () .filter (book -> Objects.equals (author, book.getAuthor ())) .collect (Collectors.toList ()); } offentlig Valgfri bookByTitle (strengtitel) {return books.stream () .filter (book -> book.getTitle (). er lig med (titel)) .findFirst (); }}

Som vi kan se, er det muligt at tilføje og søge efter bøger i butikken. Lad os nu oprette et par agurksætninger for at interagere med boghandlen:

offentlig klasse BookStoreRunSteps {privat BookStore-butik; privat liste fundet Bøger; privat Bog fundet Bog; @Før offentlig ugyldig setUp () {butik = ny BookStore (); foundBooks = ny ArrayList (); } @Given ("^ Jeg har følgende bøger i butikken $") public void haveBooksInTheStore (DataTable table) {List rækker = tabel.asLister (String.class); for (Listekolonner: rækker) {store.addBook (ny bog (kolonner.get (0), kolonner.get (1))); }} @When ("^ Jeg søger efter bøger efter forfatter (. +) $") Offentlig ugyldig søgningForBooksByAuthor (strengforfatter) {foundBooks = store.booksByAuthor (forfatter); } @When ("^ Jeg søger efter en bog med titlen (. +) $") Offentlig ugyldig søgningForBookByTitle (Stringtitel) {fundetBog = butik.bookByTitle (titel) .orElse (null); } @Then ("^ Jeg finder (\ d +) bøger $") offentlige ugyldige findBooks (int count) {assertEquals (count, foundBooks.size ()); } @Then ("^ Jeg finder en bog $") offentlig ugyldig findABook () {assertNotNull (foundBook); } @Then ("^ Jeg finder ingen bog $") offentlig ugyldig findNoBook () {assertNull (foundBook); }}

Med disse sætninger kan vi tilføje bøger, søge efter dem efter forfatter eller titel og kontrollere, om vi finder dem eller ej.

Nu er alt klar til, at vi kan oprette vores funktion. Vi søger efter bøger efter deres forfatter, men også efter deres titel:

Funktion: Boghandel uden baggrund Scenarie: Find bøger efter forfatter Da jeg har følgende bøger i butikken | Djævelen i den hvide by | Erik Larson | | Løven, heksen og klædeskabet | C.S. Lewis | | I Dyrenes Have | Erik Larson | Når jeg søger efter bøger af forfatter Erik Larson Så finder jeg 2 bøger Scenario: Find bøger efter forfatter, men er ikke der, da jeg har følgende bøger i butikken | Djævelen i den hvide by | Erik Larson | | Løven, heksen og klædeskabet | C.S. Lewis | | I Dyrenes Have | Erik Larson | Når jeg søger efter bøger af forfatter Marcel Proust Så finder jeg 0 bøger Scenarie: Find bog efter titel Givet at jeg har følgende bøger i butikken | Djævelen i den hvide by | Erik Larson | | Løven, heksen og klædeskabet | C.S. Lewis | | I Dyrenes Have | Erik Larson | Når jeg søger efter en bog med titlen Løven, heksen og klædeskabet, så finder jeg en bog Scenario: Find bog efter titel, men er ikke der, da jeg har følgende bøger i butikken | Djævelen i den hvide by | Erik Larson | | Løven, heksen og klædeskabet | C.S. Lewis | | I Dyrenes Have | Erik Larson | Når jeg søger efter en bog med titlen Swann's Way, finder jeg ingen bog

Denne funktion fungerer fint, men det har en tendens til at være lidt detaljeret, fordi vi initialiserer butikken til hver test. Dette skaber ikke kun mange linjer, men hvis vi skal opdatere butikken, skal vi gøre det for hver test. Det er her agurk baggrunde er nyttige.

3. Eksempel

Så hvordan oprettes en baggrund, der opretter butikken til denne funktion? For at gøre dette skal vi bruge nøgleordet Baggrund, giv det en titel, som vi gør for en Scenarieog definer sætningerne, der skal udføres:

Baggrund: Boghandlen givet Jeg har følgende bøger i butikken | Djævelen i den hvide by | Erik Larson | | Løven, heksen og klædeskabet | C.S. Lewis | | I Dyrenes Have | Erik Larson |

Når vi har gjort dette, kan vi slippe af med denne sætning i testene og lade dem fokusere på deres specificiteter:

Scenarie: Find bøger efter forfatter Når jeg søger efter bøger af forfatter Erik Larson Så finder jeg 2 bøger Scenario: Find bøger efter forfatter, men er ikke der Når jeg søger efter bøger af forfatter Marcel Proust Så finder jeg 0 bøger Scenario: Find bog efter titel Når jeg søger efter en bog med titlen The Lion, the Witch and the Wardrobe Så finder jeg en bog Scenario: Find bog efter titel, men er ikke der Når jeg søger efter en bog med titlen Swann's Way Så finder jeg ingen bog

Som vi kan se, scenarierne er meget kortere end før, og de resterende sætninger fokuserer på det, vi prøver at teste i stedet for at opsætte dataene.

4. Forskel med @Før

Lad os nu diskutere forskellen mellem en agurk baggrund og @Før krog. Krogen giver os også mulighed for at udføre kode før et scenario, men denne kode er skjult for dem, der kun læser funktionsfilerne. På den anden side er en baggrund lavet af sætninger, der er synlige i funktionsfilerne.

5. Konklusion

I denne korte artikel lærte vi, hvordan du bruger funktionen Agurk baggrund. Det giver os mulighed for at udføre nogle sætninger før hvert scenarie for en funktion. Vi diskuterede også forskellen mellem denne funktion og @Før krog.

Som sædvanlig kan koden til denne artikel findes på GitHub.