Gurkenhintergrund

1. Übersicht

In diesem kurzen Tutorial lernen wir die Gurkenhintergründe kennen. Mit dieser Funktion können wir einige Sätze für jeden Test einer Gurkenfunktion ausführen.

2. Gurkenhintergrund

Lassen Sie uns zunächst erklären, was der Gurkenhintergrund ist. Ihr Zweck ist es, vor jedem Test eines Features einen oder mehrere Sätze auszuführen.

Aber welches Problem versuchen wir hier zu lösen?

Angenommen, wir haben eine Buchhandlungsanwendung, die wir mit Cucumber testen möchten. Lassen Sie uns zunächst diese Anwendung erstellen, die einfach eine Java-Klasse sein wird:

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()); } public Optional bookByTitle(String title) { return books.stream() .filter(book -> book.getTitle().equals(title)) .findFirst(); } }

Wie wir sehen können, ist es möglich, Bücher im Geschäft hinzuzufügen und zu suchen. Lassen Sie uns nun ein paar Gurkensätze erstellen, um mit dem Buchladen zu interagieren:

public class BookStoreRunSteps { private BookStore store; private List foundBooks; private Book foundBook; @Before public void setUp() { store = new BookStore(); foundBooks = new ArrayList(); } @Given("^I have the following books in the store$") public void haveBooksInTheStore(DataTable table) { List
    
      rows = table.asLists(String.class); for (List columns: rows) { store.addBook(new Book(columns.get(0), columns.get(1))); } } @When("^I search for books by author (.+)$") public void searchForBooksByAuthor(String author) { foundBooks = store.booksByAuthor(author); } @When("^I search for a book titled (.+)$") 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("^I find a book$") public void findABook() { assertNotNull(foundBook); } @Then("^I find no book$") public void findNoBook() { assertNull(foundBook); } }
    

Mit diesen Sätzen können wir Bücher hinzufügen, nach Autor oder Titel suchen und prüfen, ob wir sie finden oder nicht.

Jetzt ist alles für uns vorbereitet, um unser Feature zu erstellen. Wir werden nach Büchern ihres Autors suchen, aber auch nach ihrem Titel:

Feature: Book Store Without Background Scenario: Find books by author Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson | When I search for books by author Erik Larson Then I find 2 books Scenario: Find books by author, but isn't there Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson | When I search for books by author Marcel Proust Then I find 0 books Scenario: Find book by title Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson | When I search for a book titled The Lion, the Witch and the Wardrobe Then I find a book Scenario: Find book by title, but isn't there Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson | When I search for a book titled Swann's Way Then I find no book

Diese Funktion funktioniert einwandfrei, ist jedoch in der Regel etwas ausführlich, da wir den Speicher für jeden Test initialisieren . Dies erzeugt nicht nur viele Zeilen, sondern wenn wir den Speicher aktualisieren müssen, müssen wir dies für jeden Test tun. Dann sind Gurkenhintergründe praktisch.

3. Beispiel

Wie erstelle ich einen Hintergrund, um den Speicher für diese Funktion zu erstellen? Dazu müssen wir das Schlüsselwort Hintergrund verwenden , ihm einen Titel geben, wie wir es für ein Szenario tun , und die auszuführenden Sätze definieren:

Background: The Book Store Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson |

Wenn wir dies getan haben, können wir diesen Satz in den Tests loswerden und sie sich auf ihre Besonderheiten konzentrieren lassen:

Scenario: Find books by author When I search for books by author Erik Larson Then I find 2 books Scenario: Find books by author, but isn't there When I search for books by author Marcel Proust Then I find 0 books Scenario: Find book by title When I search for a book titled The Lion, the Witch and the Wardrobe Then I find a book Scenario: Find book by title, but isn't there When I search for a book titled Swann's Way Then I find no book

Wie wir sehen können, sind die Szenarien viel kürzer als zuvor und die verbleibenden Sätze konzentrieren sich auf das, was wir testen möchten, anstatt die Daten einzurichten.

4. Unterschied zu @Before

Lassen Sie uns nun den Unterschied zwischen einem Gurkenhintergrund und dem @ Before- Hook diskutieren . Der Hook ermöglicht es uns auch, Code vor einem Szenario auszuführen, aber dieser Code ist für diejenigen verborgen, die nur die Feature-Dateien lesen . Andererseits besteht ein Hintergrund aus Sätzen, die in den Feature-Dateien sichtbar sind.

5. Schlussfolgerung

In diesem kurzen Artikel haben wir gelernt, wie man die Gurkenhintergrundfunktion verwendet. Es ermöglicht uns, einige Sätze vor jedem Szenario eines Features auszuführen. Wir haben auch den Unterschied zwischen dieser Funktion und dem @ Before- Hook besprochen .

Wie üblich finden Sie den Code für diesen Artikel auf GitHub.