Gurke und Szenario Gliederung
1. Einführung
Cucumber ist ein BDD-Testframework (Behavioral Driven Development).
Die Verwendung des Frameworksto write repetitive scenarios 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 unter Verwendung des Konzepts vonScenario Outline coupled with Examples zu reduzieren. Im folgenden Abschnitt werden wir versuchen, ein Beispiel aufzugreifen und herauszufinden, wie wir diesen Aufwand minimieren können.
Wenn Sie mehr über den Ansatz und die Gurkensprache erfahren möchten, schauen Sie sichthis article an.
2. Gurkenunterstützung hinzufügen
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:cucumber-junit,cucumber-java,hamcrest-library
Da es sich um Testbibliotheken handelt, müssen sie nicht mit dem tatsächlich bereitstellbaren Dokument ausgeliefert werden. Aus diesem Grund haben sie alle einen Gültigkeitsbereich vontest.
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, wurde hier die Additionslogik mit 2 verschiedenen Zahlenkombinationen getestet. Mit Ausnahme von 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 Features und den Klebercode zu integrieren, können wir die JUnit-Läufer verwenden:
@RunWith(Cucumber.class)
@CucumberOptions(
features = { "classpath:features/calculator.feature" },
glue = {"com.example.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 mitScenario Outline: 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 eines regulärenScenario Definition mitScenario Outline müssen Werte in Schrittdefinitionen nicht mehr fest codiert werden. Werte werden in der Schrittdefinition selbst durch Parameter als<parameter_name> ersetzt.
Am Ende der Szenarioübersicht werden die Werte in einem durch Pipes getrennten Tabellenformat mitExamples definiert.
Ein Beispiel zum Definieren vonExamples 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 auch den Aufwand beim Schreiben und Verwalten dieser Szenarien.
Den vollständigen Quellcode dieses Artikels finden Sie inover on GitHub.