Agurk og scenarie disposition

1. Introduktion

Agurk er en BDD (Behavioral Driven Development) testramme.

Brug af rammen at skrive gentagne scenarier med forskellige permutationer af input / output kan være ret tidskrævende, vanskelige at vedligeholde og selvfølgelig frustrerende.

Agurk kom med en løsning til at reducere denne indsats ved hjælp af begrebet Scenariooversigt kombineret med eksempler. I nedenstående afsnit vil vi forsøge at tage et eksempel op og se, hvordan vi kan minimere denne indsats.

Hvis du vil læse mere om fremgangsmåden og agurkisproget, skal du kigge på denne artikel.

2. Tilføjelse af agurksupport

For at tilføje support til agurk i et simpelt Maven-projekt skal vi tilføje følgende afhængigheder:

 info.cukes agurk-junit 1.2.5 test info.cukes agurk-java 1.2.5 test org.hamcrest hamcrest-bibliotek 1.3 test 

Nyttige links til afhængigheder fra Maven Central: agurk-junit, agurk-java, hamcrest-bibliotek

Da disse tester biblioteker, behøver de ikke at blive sendt med den faktiske implementering - det er derfor, de alle er prøve afgrænset.

3. Et simpelt eksempel

Lad os demonstrere både en oppustet måde og en kortfattet måde at skrive fremhævede filer på. Lad os først definere den logik, vi vil skrive en test for:

Lad os først definere den logik, vi vil skrive en test for:

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

4. Definition af agurktests

4.1. Definition af en funktionsfil

Funktion: Lommeregner Som bruger vil jeg bruge en lommeregner til at tilføje tal, så jeg ikke behøver at tilføje mig selv Scenarie: Tilføj to tal -2 & 3 givet jeg har en lommeregner Når jeg tilføjer -2 og 3 Så skal resultatet være 1 Scenarie: Tilføj to tal 10 & 15 givet jeg har en lommeregner Når jeg tilføjer 10 og 15 Så skal resultatet være 25 

Som det ses her, er to forskellige kombinationer af tal blevet sat for at teste tilføjelseslogikken her. Bortset fra tal er alle scenarier nøjagtigt de samme.

4.2. "Lim" kode

For at teste disse scenarier er det vigtigt at definere hvert trin med den tilsvarende kode for at oversætte en erklæring til et funktionelt stykke kode:

public class CalculatorRunSteps {private int total; privat lommeregnerberegner; @Før privat ugyldigt init () {total = -999; } @Given ("^ Jeg har en lommeregner $") offentlig tomrum initializeCalculator () kaster Throwable {calculator = new Calculator (); } @Når ("^ Jeg tilføjer (-? \ d +) og (-? \ d +) $") offentlig tomrumstestTilføj (int num1, int num2) kaster Throwable {total = calculator.add (num1, num2); } @Then ("^ resultatet skal være (-? \ d +) $") offentligt ugyldigt validateResult (int resultat) kaster Throwable {Assert.assertThat (total, Matchers.equalTo (result)); }}

4.3. En løberklasse

For at integrere funktioner og limkoden kan vi bruge JUnit-løbere:

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

5. Omskrivningsfunktioner ved hjælp af scenariskonturer

Vi så i afsnit 4.1. hvordan definition af en funktionsfil kan være en tidskrævende opgave og mere tilbøjelig til fejl. Den samme funktionsfil kan reduceres til kun få linjer ved hjælp af Scenariooversigt:

Funktion: Lommeregner Som bruger vil jeg bruge en lommeregner til at tilføje tal, så jeg ikke behøver at tilføje mig selv Scenarieoversigt: Tilføj to numre & givet jeg har en lommeregner Når jeg tilføjer og Så skal resultatet være Eksempler: | num1 | num2 | i alt | | -2 | 3 | 1 | | 10 | 15 | 25 | | 99 | -99 | 0 | | -1 | -10 | -11 |

Når man sammenligner en almindelig Scenario Definition med Scenariooversigt, værdier behøver ikke længere at være hårdkodede i trindefinitioner. Værdier erstattes med parametre som i trin-definition selv.

I slutningen af ​​Scenariooversigt defineres værdier i et rørafgrænset tabelformat ved hjælp af Eksempler.

En prøve at definere Eksempler er vist nedenfor:

Eksempler: | Parameter_Navn1 | Parameter_Name2 | | Værdi-1 | Værdi-2 | | Værdi-X | Værdi-Y |

6. Konklusion

Med denne hurtige artikel har vi vist, hvordan scenarier kan gøres generiske i naturen. Og reducer også indsatsen for at skrive og vedligeholde disse scenarier.

Den komplette kildekode til denne artikel kan findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found