Agurk og scenario disposisjon

1. Introduksjon

Agurk er et BDD-testrammeverk (Behavioral Driven Development).

Bruke rammeverket å skrive repeterende scenarier med forskjellige permutasjoner av innganger / utganger kan være ganske tidkrevende, vanskelig å vedlikeholde og selvfølgelig frustrerende.

Agurk kom med en løsning for å redusere denne innsatsen ved å bruke konseptet Scenariooversikt kombinert med eksempler. I delen nedenfor vil vi prøve å ta opp et eksempel og se hvordan vi kan minimere denne innsatsen.

Hvis du ønsker å lese mer om tilnærmingen og surkornsspråket, kan du ta en titt på denne artikkelen.

2. Legge til agurkestøtte

For å legge til støtte for agurk i et enkelt Maven-prosjekt, må vi legge til følgende avhengigheter:

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

Nyttige lenker til avhengigheter fra Maven Central: agurk-junit, agurk-java, hamcrest-bibliotek

Siden disse tester biblioteker, trenger de ikke å bli sendt med den faktiske distribuerbare - det er derfor de alle er test scoped.

3. Et enkelt eksempel

La oss demonstrere både en oppblåst måte og en kortfattet måte å skrive utvalgte filer på. La oss først definere logikken vi vil skrive en test for:

La oss først definere logikken vi vil skrive en test for:

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

4. Definere agurktester

4.1. Definere en funksjonsfil

Funksjon: Kalkulator Som bruker vil jeg bruke en kalkulator for å legge til tall, slik at jeg ikke trenger å legge til meg selv Scenario: Legg til to tall -2 & 3 Gitt jeg har en kalkulator Når jeg legger til -2 og 3 Så skal resultatet være 1 Scenario: Legg til to tall 10 & 15 Gitt at jeg har en kalkulator Når jeg legger til 10 og 15, skal resultatet være 25 

Som sett her, har to forskjellige kombinasjoner av tall blitt testet her tilleggslogikken. Bortsett fra tall, er alle scenariene nøyaktig de samme.

4.2. "Lim" -kode

For å teste ut disse scenariene, er jeg viktig å definere hvert trinn med tilsvarende kode, for å oversette en uttalelse til et funksjonelt stykke kode:

offentlig klasse CalculatorRunSteps {private int total; privat kalkulator kalkulator; @Før privat ugyldig init () {total = -999; } @Given ("^ Jeg har en kalkulator $") offentlig tomrom initializeCalculator () kaster Kastbar {kalkulator = ny Kalkulator (); } @Når ("^ Jeg legger til (-? \ d +) og (-? \ d +) $") offentlig tomromstestLegg til (int num1, int num2) kaster Kastbar {total = calculator.add (num1, num2); } @Then ("^ resultatet skal være (-? \ d +) $") offentlig ugyldig validateResult (int resultat) kaster Throwable {Assert.assertThat (total, Matchers.equalTo (result)); }}

4.3. En løperklasse

For å integrere funksjoner og limkoden kan vi bruke JUnit-løpere:

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

5. Omskrivingsfunksjoner ved bruk av scenariskonturer

Vi så i avsnitt 4.1. hvordan å definere en funksjonsfil kan være en tidkrevende oppgave og mer utsatt for feil. Den samme funksjonsfilen kan reduseres til bare noen få linjer ved hjelp av Scenariooversikt:

Funksjon: Kalkulator Som bruker vil jeg bruke en kalkulator for å legge til tall slik at jeg ikke trenger å legge til meg selv Scenario disposisjon: Legg til to tall & Gitt jeg har en kalkulator Når jeg legger til og Så skal resultatet være Eksempler: | num1 | num2 | totalt | | -2 | 3 | 1 | | 10 | 15 | 25 | | 99 | -99 | 0 | | -1 | -10 | -11 |

Når man sammenligner en vanlig Scenario Definisjon med Scenariooversikt, verdier trenger ikke lenger å være hardkodede i trinndefinisjoner. Verdiene erstattes med parametere som i trinndefinisjon i seg selv.

På slutten av Scenario disposisjon defineres verdier i et røravgrenset tabellformat ved hjelp av Eksempler.

Et utvalg å definere Eksempler er vist nedenfor:

Eksempler: | Parameter_Name1 | Parameter_Name2 | | Verdi-1 | Verdi-2 | | Verdi-X | Verdi-Y |

6. Konklusjon

Med denne raske artikkelen har vi vist hvordan scenarier kan gjøres generiske i naturen. Og reduser også innsatsen for å skrive og vedlikeholde disse scenariene.

Den komplette kildekoden til denne artikkelen finner du på GitHub.


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