Agurk Bakgrunn

1. Oversikt

I denne korte opplæringen skal vi lære om agurkbakgrunner, som er en funksjon som lar oss utføre noen setninger for hver test av en agurkfunksjon.

2. Agurkbakgrunn

La oss først forklare hva agurkbakgrunnen er. Hensikten er å utføre en eller flere setninger før hver test av en funksjon.

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

La oss si at vi har en bokbutikkapplikasjon vi vil teste med agurk. Først og fremst, la oss lage det programmet, som ganske enkelt vil være en Java-klasse:

public class BookStore {private List books = new ArrayList (); public void addBook (Book book) {books.add (book); } public List booksByAuthor (String author) {return books.stream () .filter (book -> Objects.equals (author, book.getAuthor ())) .collect (Collectors.toList ()); } offentlig Valgfri bookByTitle (strengtittel) {retur books.stream () .filter (bok -> book.getTitle (). er lik (tittel)) .findFirst (); }}

Som vi kan se, er det mulig å legge til og søke etter bøker i butikken. La oss nå lage noen agurksetninger for å samhandle med bokhandelen:

offentlig klasse BookStoreRunSteps {privat BookStore-butikk; private Liste funnetBøker; private Book funnetBok; @Før offentlig ugyldig setUp () {store = ny BookStore (); foundBooks = ny ArrayList (); } @Given ("^ Jeg har følgende bøker i butikken $") public void haveBooksInTheStore (DataTable table) {List rader = table.asLists (String.class); for (Listekolonner: rader) {butikk.addBook (ny bok (kolonner.get (0), kolonner.get (1))); }} @When ("^ Jeg søker etter bøker av forfatter (. +) $") Offentlig ugyldig søkForBooksByAuthor (strengforfatter) {foundBooks = store.booksByAuthor (forfatter); } @When ("^ Jeg søker etter en bok med tittelen (. +) $") Public void searchForBookByTitle (String title) {foundBook = store.bookByTitle (title) .orElse (null); } @Then ("^ I find (\ d +) books $") public void findBooks (int count) {assertEquals (count, foundBooks.size ()); } @Then ("^ Jeg finner en bok $") public void findABook () {assertNotNull (foundBook); } @Then ("^ Jeg finner ingen bok $") offentlig ugyldig findNoBook () {assertNull (foundBook); }}

Med disse setningene kan vi legge til bøker, søke etter dem etter forfatter eller tittel, og sjekke om vi finner dem eller ikke.

Nå er alt klart for oss å lage vår funksjon. Vi søker etter bøker av forfatteren, men også etter tittelen:

Feature: Book Store Without Background Scenario: Finn bøker av forfatter Gitt jeg har følgende bøker i butikken | Djevelen i den hvite byen | Erik Larson | | Løven, heksen og garderoben | C.S. Lewis | | I dyrenes hage | Erik Larson | Når jeg søker etter bøker av forfatter Erik Larson Så finner jeg to bøker Scenario: Finn bøker av forfatter, men er ikke der Gitt jeg har følgende bøker i butikken | Djevelen i den hvite byen | Erik Larson | | Løven, heksen og garderoben | C.S. Lewis | | I dyrenes hage | Erik Larson | Når jeg søker etter bøker av forfatter Marcel Proust Så finner jeg 0 bøker Scenario: Finn bok etter tittel Gitt jeg har følgende bøker i butikken | Djevelen i den hvite byen | Erik Larson | | Løven, heksen og garderoben | C.S. Lewis | | I dyrenes hage | Erik Larson | Når jeg søker etter en bok med tittelen The Lion, the Witch and the Wardrobe Så finner jeg en bok Scenario: Finn bok etter tittel, men er ikke der Gitt jeg har følgende bøker i butikken | Djevelen i den hvite byen | Erik Larson | | Løven, heksen og garderoben | C.S. Lewis | | I dyrenes hage | Erik Larson | Når jeg søker etter en bok med tittelen Swann's Way, finner jeg ingen bok

Denne funksjonen fungerer bra, men det pleier å være litt ordentlig fordi vi initialiserer butikken for hver test. Ikke bare skaper dette mange linjer, men hvis vi må oppdatere butikken, må vi gjøre det for hver test. Det er da agurkbakgrunner er nyttige.

3. Eksempel

Så hvordan lager du en bakgrunn som lager butikken for denne funksjonen? For å gjøre dette må vi bruke nøkkelordet Bakgrunn, gi den en tittel som vi gjør for en Scenario, og definer setningene som skal utføres:

Bakgrunn: Bokhandelen Gitt jeg har følgende bøker i butikken | Djevelen i den hvite byen | Erik Larson | | Løven, heksen og garderoben | C.S. Lewis | | I dyrenes hage | Erik Larson |

Når vi har gjort dette, kan vi bli kvitt denne setningen i testene, og la dem fokusere på deres spesifikasjoner:

Scenario: Finn bøker av forfatter Når jeg søker etter bøker av forfatter Erik Larson Så finner jeg 2 bøker Scenario: Finn bøker av forfatter, men er ikke der Når jeg søker etter bøker av forfatter Marcel Proust Så finner jeg 0 bøker Scenario: Finn bok etter tittel Når jeg søker etter en bok med tittelen The Lion, the Witch and the Wardrobe Så finner jeg en bok Scenario: Finn bok etter tittel, men er ikke der Når jeg søker etter en bok med tittelen Swann's Way Da finner jeg ingen bok

Som vi kan se, scenariene er mye kortere enn før, og de resterende setningene fokuserer på det vi prøver å teste i stedet for å sette opp dataene.

4. Forskjell med @Før

La oss nå diskutere forskjellen mellom en agurk bakgrunn og @Før krok. Kroken lar oss også utføre kode før et scenario, men denne koden er skjult for de som bare leser funksjonsfilene. På den annen side er en bakgrunn laget av setninger som er synlige i funksjonsfilene.

5. Konklusjon

I denne korte artikkelen lærte vi hvordan du bruker agurkbakgrunnsfunksjonen. Det lar oss utføre noen setninger før hvert scenario av en funksjon. Vi diskuterte også forskjellen mellom denne funksjonen og @Før krok.

Som vanlig kan koden for denne artikkelen finnes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found