Pozadina krastavca

1. Pregled

U ovom kratkom vodiču naučit ćemo o pozadini krastavaca, što je značajka koja nam omogućuje izvršavanje nekih rečenica za svaki test značajke krastavca.

2. Pozadina krastavca

Prvo, objasnimo što je pozadina krastavaca. Njegova je svrha izvršiti jednu ili više rečenica prije svakog testa značajke.

Ali koji problem ovdje pokušavamo riješiti?

Recimo da imamo aplikaciju iz knjižare koju želimo testirati s krastavcem. Prije svega, izradimo onu aplikaciju koja će jednostavno biti Java klasa:

javna klasa BookStore {privatni popis knjiga = novi ArrayList (); public void addBook (Knjiga knjiga) {books.add (knjiga); } javni popis booksByAuthor (autor niza) {return books.stream () .filter (book -> Objects.equals (author, book.getAuthor ())) .collect (Collectors.toList ()); } javni Izborni bookByTitle (naslov niza) {return books.stream () .filter (book -> book.getTitle (). jednako (naslov)) .findFirst (); }}

Kao što vidimo, moguće je dodavati i pretraživati ​​knjige u trgovini. Ajmo sada stvoriti nekoliko rečenica krastavaca za interakciju s knjižarnicom:

javni razred BookStoreRunSteps {privatna trgovina BookStore; privatni popis foundBooks; privatna knjiga pronađenaKnjiga; @Prije javne void setUp () {store = new BookStore (); foundBooks = novi ArrayList (); } @Given ("^ Imam sljedeće knjige u trgovini $") javna praznina haveBooksInTheStore (tablica DataTable) {Popis redovi = table.asLists (String.class); za (Stupci popisa: retci) {store.addBook (nova Knjiga (columns.get (0), columns.get (1))); }} @When ("^ Tražim knjige po autoru (. +) $") Public void searchForBooksByAuthor (Autor niza) {foundBooks = store.booksByAuthor (autor); } @When ("^ Tražim knjigu s naslovom (. +) $") Public void searchForBookByTitle (naslov niza) {foundBook = store.bookByTitle (title) .orElse (null); } @Then ("^ Pronalazim (\ d +) knjige $") javna void findBooks (int count) {assertEquals (count, foundBooks.size ()); } @Then ("^ Pronađem knjigu $") public void findABook () {assertNotNull (foundBook); } @Then ("^ Ne nalazim knjigu $") public void findNoBook () {assertNull (foundBook); }}

Tim rečenicama možemo dodavati knjige, tražiti ih po autoru ili naslovu i provjeriti nalazimo li ih ili ne.

Sada je sve postavljeno da stvorimo svoju značajku. Tražit ćemo knjige po njihovom autoru, ali i po naslovu:

Značajka: Knjižara bez pozadine Scenarij: Pronađite knjige autora S obzirom da u trgovini imam sljedeće knjige | Đavao u bijelom gradu | Erik Larson | | Lav, vještica i ormar | C.S. Lewis | | U vrtu zvijeri | Erik Larson | Kada tražim knjige autora Erika Larsona Tada pronalazim 2 knjige Scenarij: Pronađite knjige autora, ali nema li ih S obzirom da u trgovini imam sljedeće knjige | Đavao u bijelom gradu | Erik Larson | | Lav, vještica i ormar | C.S. Lewis | | U vrtu zvijeri | Erik Larson | Kada tražim knjige autora Marcela Prousta Tada pronalazim 0 knjiga Scenarij: Pronađi knjigu po naslovu S obzirom da u trgovini imam sljedeće knjige | Đavao u bijelom gradu | Erik Larson | | Lav, vještica i ormar | C.S. Lewis | | U vrtu zvijeri | Erik Larson | Kada tražim knjigu pod naslovom Lav, vještica i ormar Tada pronalazim knjigu Scenarij: Pronađi knjigu po naslovu, ali nema je S obzirom da u trgovini imam sljedeće knjige | Đavao u bijelom gradu | Erik Larson | | Lav, vještica i ormar | C.S. Lewis | | U vrtu zvijeri | Erik Larson | Kad tražim knjigu pod nazivom Swannov put, tada ne nalazim nijednu knjigu

Ova značajka dobro funkcionira, ali obično je malo opširno jer inicijaliziramo spremište za svaki test. Ne samo da ovo stvara puno linija, već ako moramo ažurirati trgovinu, to moramo učiniti za svaki test. Tada su pozadine krastavaca dobro došle.

3. Primjer

Dakle, kako stvoriti pozadinu koja stvara trgovinu za ovu značajku? Da bismo to učinili, moramo upotrijebiti ključnu riječ Pozadina, dajte mu naslov kao i za a Scenarij, i definirajte rečenice za izvršenje:

Pozadina: Knjižara S obzirom da u trgovini imam sljedeće knjige | Đavao u bijelom gradu | Erik Larson | | Lav, vještica i ormar | C.S. Lewis | | U vrtu zvijeri | Erik Larson |

Kada to učinimo, možemo se riješiti ove rečenice u testovima, dopuštajući im da se usredotoče na svoje specifičnosti:

Scenarij: Pronađi knjige autora Kad tražim knjige autora Erika Larsona Tada nađem 2 knjige Scenarij: Pronađem knjige autora, ali nema li ih Kada tražim knjige autora Marcela Prousta Tada nađem 0 knjiga Scenarij: Pronađi knjigu po naslovu Kada tražim knjigu pod nazivom Lav, vještica i ormar Tada pronalazim knjigu Scenarij: Pronađi knjigu po naslovu, ali zar je nema Kad tražim knjigu pod nazivom Swannov put Tada ne nalazim knjigu

Kao što vidimo, scenariji su puno kraći nego prije, a preostale rečenice usredotočuju se na ono što pokušavamo testirati, a ne na postavljanje podataka.

4. Razlika sa @Prije

Sada, razgovarajmo o razlici između pozadine krastavaca i @Prije kuka. Udica nam također omogućuje izvršavanje koda prije scenarija, ali ovaj je kod skriven onima koji čitaju samo datoteke značajki. S druge strane, Pozadina se sastoji od rečenica koje su vidljive u datotekama značajki.

5. Zaključak

U ovom kratkom članku naučili smo kako koristiti značajku Pozadina krastavca. Omogućuje nam izvršavanje nekih rečenica prije svakog scenarija značajke. Također smo razgovarali o razlici između ove značajke i @Prije kuka.

Kao i obično, kôd za ovaj članak možete pronaći na GitHubu.