Gurken- und Szenarioübersicht

1. Einleitung

Cucumber ist ein BDD-Testframework (Behavioral Driven Development).

Die Verwendung des Frameworks zum Schreiben sich wiederholender Szenarien mit unterschiedlichen Permutationen von Ein- / Ausgängen kann sehr zeitaufwändig, schwierig zu warten und natürlich frustrierend sein.

Gurke kam mit einer Lösung, um diesen Aufwand zu reduzieren, indem das Konzept der Szenario-Gliederung in Verbindung mit Beispielen verwendet wurde . Im folgenden Abschnitt werden wir versuchen, ein Beispiel aufzunehmen und zu sehen, wie wir diesen Aufwand minimieren können.

Wenn Sie mehr über den Ansatz und die Gurkensprache erfahren möchten, lesen Sie diesen Artikel.

2. Hinzufügen von Gurkenunterstützung

Um die Unterstützung für Cucumber in einem einfachen Maven-Projekt hinzuzufügen, müssen die folgenden Abhängigkeiten hinzugefügt werden:

 info.cukes cucumber-junit 1.2.5 test   info.cukes cucumber-java 1.2.5 test   org.hamcrest hamcrest-library 1.3 test 

Nützliche Links zu Abhängigkeiten von Maven Central: Gurken-Junit, Gurken-Java, Hamcrest-Bibliothek

Da diese Bibliotheken testen, dass sie nicht mit dem tatsächlichen ausfahrbaren ausgeliefert werden müssen -, weshalb sie alle sind Test scoped.

3. Ein einfaches Beispiel

Lassen Sie uns sowohl eine aufgeblähte als auch eine prägnante Art des Schreibens von vorgestellten Dateien demonstrieren. Definieren wir zunächst die Logik, für die wir einen Test schreiben möchten:

Definieren wir zunächst die Logik, für die wir einen Test schreiben möchten:

public class Calculator { public int add(int a, int b) { return a + b; } }

4. Gurkentests definieren

4.1. Feature-Datei definieren

Feature: Calculator As a user I want to use a calculator to add numbers So that I don't need to add myself Scenario: Add two numbers -2 & 3 Given I have a calculator When I add -2 and 3 Then the result should be 1 Scenario: Add two numbers 10 & 15 Given I have a calculator When I add 10 and 15 Then the result should be 25 

Wie hier zu sehen ist, wurden hier 2 verschiedene Zahlenkombinationen eingesetzt, um die Additionslogik zu testen. Abgesehen von den Zahlen sind alle Szenarien genau gleich.

4.2. "Kleber" -Code

Um diese Szenarien zu testen, muss jeder Schritt mit dem entsprechenden Code definiert werden, um eine Anweisung in einen funktionalen Code zu übersetzen:

public class CalculatorRunSteps { private int total; private Calculator calculator; @Before private void init() { total = -999; } @Given("^I have a calculator$") public void initializeCalculator() throws Throwable { calculator = new Calculator(); } @When("^I add (-?\\d+) and (-?\\d+)$") public void testAdd(int num1, int num2) throws Throwable { total = calculator.add(num1, num2); } @Then("^the result should be (-?\\d+)$") public void validateResult(int result) throws Throwable { Assert.assertThat(total, Matchers.equalTo(result)); } }

4.3. Eine Läuferklasse

Um Funktionen und den Klebercode zu integrieren, können wir die JUnit-Läufer verwenden:

@RunWith(Cucumber.class) @CucumberOptions( features = { "classpath:features/calculator.feature" }, glue = {"com.baeldung.cucumber.calculator" }) public class CalculatorTest {}

5. Umschreiben von Funktionen mithilfe von Szenario-Konturen

Wir haben in Abschnitt 4.1 gesehen. Wie das Definieren einer Feature-Datei eine zeitaufwändige und fehleranfällige Aufgabe sein kann. Dieselbe Feature-Datei kann mithilfe der Szenario-Gliederung auf wenige Zeilen reduziert werden :

Feature: Calculator As a user I want to use a calculator to add numbers So that I don't need to add myself Scenario Outline: Add two numbers  &  Given I have a calculator When I add  and  Then the result should be  Examples: | num1 | num2 | total | | -2 | 3 | 1 | | 10 | 15 | 25 | | 99 | -99 | 0 | | -1 | -10 | -11 |

Beim Vergleich einer regulären Szenariodefinition mit der Szenarioübersicht müssen die Werte in den Schrittdefinitionen nicht mehr fest codiert werden. Werte werden durch Parameter wie ersetzt in der Schrittdefinition selbst.

Am Ende der Szenarioübersicht werden die Werte mithilfe von Beispielen in einem durch Pipe getrennten Tabellenformat definiert .

Ein Beispiel zum Definieren von Beispielen ist unten gezeigt:

Examples: | Parameter_Name1 | Parameter_Name2 | | Value-1 | Value-2 | | Value-X | Value-Y |

6. Fazit

In diesem kurzen Artikel haben wir gezeigt, wie Szenarien generischer Natur sein können. Reduzieren Sie außerdem den Aufwand für das Schreiben und Verwalten dieser Szenarien.

Den vollständigen Quellcode dieses Artikels finden Sie auf GitHub.