Cetriolo e contorno dello scenario

1. Introduzione

Cucumber è un framework di test BDD (Behavioral Driven Development).

L'utilizzo del framework per scrivere scenari ripetitivi con diverse permutazioni di input / output può essere piuttosto dispendioso in termini di tempo, difficile da mantenere e ovviamente frustrante.

Cucumber ha fornito una soluzione per ridurre questo sforzo utilizzando il concetto di Scenario Outline insieme agli esempi . Nella sezione seguente, proveremo a prendere un esempio e vedere come possiamo ridurre al minimo questo sforzo.

Se vuoi saperne di più sull'approccio e sul linguaggio Gherkin, dai un'occhiata a questo articolo.

2. Aggiunta di supporto cetriolo

Per aggiungere il supporto per Cucumber in un semplice progetto Maven, dovremo aggiungere le seguenti dipendenze:

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

Collegamenti utili alle dipendenze da Maven Central: cucumber-junit, cucumber-java, hamcrest-library

Poiché si tratta di librerie di test, non è necessario che vengano fornite con il distribuibile effettivo, motivo per cui sono tutte con ambito di test .

3. Un semplice esempio

Dimostriamo sia un modo gonfio che un modo conciso di scrivere i file in primo piano. Definiamo prima la logica per cui vogliamo scrivere un test:

Definiamo prima la logica per cui vogliamo scrivere un test:

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

4. Definizione dei test di cetriolo

4.1. Definizione di un file di funzioni

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 

Come visto qui, 2 diverse combinazioni di numeri sono state messe per testare qui la logica dell'addizione. A parte i numeri, tutti gli scenari sono esattamente gli stessi.

4.2. Codice "Colla"

Per testare questi scenari, è essenziale definire ogni passaggio con il codice corrispondente, al fine di tradurre un'istruzione in un pezzo di codice funzionale:

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. Una classe di corridori

Per integrare funzionalità e codice colla, possiamo utilizzare i corridori JUnit:

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

5. Riscrittura delle caratteristiche utilizzando i contorni dello scenario

Abbiamo visto nella Sezione 4.1. in che modo la definizione di un file di funzionalità può essere un'attività che richiede tempo e più soggetta a errori. Lo stesso file di funzionalità può essere ridotto a poche righe utilizzando la struttura dello scenario:

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 |

Quando si confronta una normale definizione dello scenario con la struttura dello scenario , i valori non devono più essere codificati nelle definizioni dei passaggi. I valori vengono sostituiti con parametri come nella definizione stessa dei passaggi.

Alla fine della struttura dello scenario, i valori vengono definiti in un formato di tabella delimitato da barre verticali utilizzando gli esempi .

Di seguito è riportato un esempio per definire gli esempi :

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

6. Conclusione

Con questo rapido articolo, abbiamo mostrato come gli scenari possono essere resi generici in natura. E ridurre anche gli sforzi per scrivere e mantenere questi scenari.

Il codice sorgente completo di questo articolo può essere trovato su GitHub.