Krastavac i okvirni scenarij

1. Uvod

Krastavac je BDD (Behavioral Driven Development) testni okvir.

Korištenje okvira za pisanje ponavljajućih scenarija s različitim permutacijama ulaza / izlaza može biti prilično dugotrajno, teško za održavanje i naravno frustrirajuće.

Krastavac je došao s rješenjem za smanjenje ovog napora pomoću koncepta Pregled scenarija zajedno s primjerima. U odjeljku u nastavku pokušat ćemo uzeti primjer i vidjeti kako možemo umanjiti taj napor.

Ako želite pročitati više o pristupu i jeziku kornišona, pogledajte ovaj članak.

2. Dodavanje potpore krastavcu

Da bismo dodali podršku za Krastavac u jednostavnom Mavenovom projektu, morat ćemo dodati sljedeće ovisnosti:

 info.cukes krastavac-junit 1.2.5 test info.cukes krastavac-java 1.2.5 test org.hamcrest hamcrest-knjižnica 1.3 test 

Korisne veze do ovisnosti iz Maven Central-a: krastavac-junit, krastavac-java, hamcrest-knjižnica

Budući da su ovo knjižnice za testiranje, ne trebaju ih isporučivati ​​sa stvarnim raspoređivanjem - zbog čega su sve test opseg.

3. Jednostavan primjer

Pokažimo i naduti način i sažet način pisanja istaknutih datoteka. Prvo definirajmo logiku za koju želimo napisati test:

Prvo definirajmo logiku za koju želimo napisati test:

Kalkulator javne klase {public int add (int a, int b) {return a + b; }}

4. Utvrđivanje ispitivanja krastavaca

4.1. Definiranje datoteke značajke

Značajka: Kalkulator Kao korisnik želim koristiti kalkulator za dodavanje brojeva Tako da se ne trebam dodavati. Scenarij: Dodaj dva broja -2 i 3 S obzirom da imam kalkulator Kada dodam -2 i 3 Tada bi rezultat trebao biti 1 Scenarij: Dodaj dva broja 10 i 15 S obzirom da imam kalkulator Kada zbrojim 10 i 15 Tada bi rezultat trebao biti 25 

Kao što se ovdje vidi, ovdje su stavljene dvije različite kombinacije brojeva za testiranje logike zbrajanja. Osim brojeva, svi su scenariji potpuno isti.

4.2. Kod "ljepila"

Da bih testirao ove scenarije, bitno je definirati svaki korak s odgovarajućim kodom, kako bih naredbu preveo u funkcionalni dio koda:

javna klasa CalculatorRunSteps {private int total; privatni kalkulator kalkulatora; @Prije privatne void init () {ukupno = -999; } @Given ("^ Imam kalkulator $") javna praznina initializeCalculator () baca mogućnost bacanja {kalkulator = novi kalkulator (); } @ Kada ("^ dodam (-? \ d +) i (-? \ d +) $") test javne praznineAdd (int num1, int num2) baca bacanje {total = calculator.add (num1, num2); } @Then ("^ rezultat bi trebao biti (-? \ d +) $") javna praznina validateResult (int rezultat) baca Throwable {Assert.assertThat (ukupno, Matchers.equalTo (rezultat)); }}

4.3. Klasa trkača

Kako bismo integrirali značajke i kod ljepila, možemo koristiti JUnit pokretače:

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

5. Prepisivanje značajki pomoću scenarija

Vidjeli smo u odjeljku 4.1. kako definiranje datoteke značajki može biti dugotrajan zadatak i skloniji pogreškama. Ista datoteka značajke može se smanjiti na samo nekoliko redaka pomoću Pregled scenarija:

Značajka: Kalkulator Kao korisnik želim koristiti kalkulator za dodavanje brojeva Tako da se ne trebam dodavati. Okvir scenarija: Dodaj dva broja & S obzirom na to da imam kalkulator Kada dodam i Tada bi rezultat trebao biti Primjeri: | num1 | num2 | ukupno | | -2 | 3 | 1 | | 10 | 15 | 25 | | 99 | -99 | 0 | | -1 | -10 | -11 |

Kad se uspoređuje redovita Definicija scenarija s Okvir scenarija, vrijednosti više ne trebaju biti teško kodirane u definicijama koraka. Vrijednosti se zamjenjuju parametrima kao u samoj definiciji koraka.

Na kraju Okvira scenarija, vrijednosti se definiraju u formatu tablice razgraničene cijevima Primjeri.

Uzorak za definiranje Primjeri prikazano je dolje:

Primjeri: | ParametarName1 | ParametarName2 | | Vrijednost-1 | Vrijednost-2 | | Vrijednost-X | Vrijednost-Y |

6. Zaključak

Ovim kratkim člankom pokazali smo kako scenariji mogu postati generički. I također smanjiti napor u pisanju i održavanju ovih scenarija.

Kompletni izvorni kôd ovog članka nalazi se na GitHubu.