Gurken- und Szenario-Gliederung

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.