Agurkfjederintegration
1. Oversigt
Agurk er en meget kraftig testramme skrevet på Ruby programmeringssprog, der følger BDD (adfærd-drevet udvikling) metode. Det gør det muligt for udviklere at skrive brugssager på højt niveau i almindelig tekst, der kan verificeres af ikke-tekniske interessenter, og gøre dem til eksekverbare test, skrevet på et sprog kaldet Gherkin.
Vi har allerede diskuteret disse i en anden artikel.
Og agurk-fjederintegration er beregnet til at gøre testautomatisering lettere. Når vi først har agurktestene integreret med Spring, skal vi være i stand til at udføre dem sammen med Maven-bygningen.
2. Maven-afhængigheder
Lad os komme i gang med Cucumber-Spring-integrationen ved at definere Maven-afhængighederne - startende med Cucumber-JVM-afhængighed:
io. agurk agurk-java 6.8.0 test
Vi kan finde den nyeste version af agurk JVM her.
Dernæst tilføjer vi afhængigheden af test af JUnit og agurk:
io. agurk agurk-junit 6.8.0 test
Den seneste version af agurk JUnit kan findes her.
Og endelig afhængighed af forår og agurk:
io. agurk agurk-fjeder 6.8.0 test
Igen kan vi tjekke den nyeste version af Agurk Spring herovre.
3. Konfiguration
Vi ser nu på, hvordan vi kan integrere agurk i en Spring-applikation.
Først opretter vi en Spring Boot-applikation - som vi følger artiklen om Spring-Boot-applikation for. Derefter opretter vi en Spring REST-tjeneste og skriver agurktesten for den.
3.1. REST-controller
Lad os først oprette en simpel controller:
@RestController offentlig klasse VersionController {@GetMapping ("/ version") offentlig String getVersion () {return "1.0"; }}
3.2. Definitioner af agurktrin
Alt hvad vi behøver for at køre vores agurktests med JUnit er at oprette en enkelt tom klasse med en kommentar @RunWith (Agurk.klasse):
@RunWith (Cucumber.class) @CucumberOptions (features = "src / test / resources") offentlig klasse CucumberIntegrationTest {}
Vi kan se kommentaren @CucumberOptions hvor vi specificerer placeringen af Gherkin-filen, som også er kendt som funktionsfilen. På dette tidspunkt genkender agurk agurketsproget; du kan læse mere om agurk i artiklen nævnt i indledningen.
Så lad os nu oprette en agurkfunktionsfil:
Funktion: versionen kan hentes Scenarie: klient ringer til GET / version Når klienten ringer / version Så modtager klienten statuskode på 200 Og klienten modtager serverversion 1.0
Scenariet er at foretage et GET-opkald til REST-tjeneste url /version og bekræft svaret.
Dernæst skal vi oprette en såkaldt limkode. Dette er metoder, der forbinder et enkelt agurkatrin med Java-kode.
Vi er nødt til muligheder her - vi kan enten bruge agurkeudtryk eller regulære udtryk inde i kommentarerne. I vores tilfælde holder vi os til de regulære udtryk:
@When ("^ klienten kalder / version $") offentlig annullerer the_client_issues_GET_version () kast Throwable {executeGet ("// localhost: 8080 / version"); } @Then ("^ klienten modtager statuskode på (\ d +) $") offentligt ugyldigt_client_receives_status_code_of (int statusCode) kaster Throwable {HttpStatus currentStatusCode = latestResponse.getTheResponse (). GetStatusCode (); assertThat ("statuskode er forkert:" + latestResponse.getBody (), currentStatusCode.value (), er (statusCode)); } @And ("^ klienten modtager serverversion (. +) $") Offentlig ugyldig_client_receives_server_version_body (strengversion) kaster Throwable {assertThat (latestResponse.getBody (), er (version)); }
Så lad os nu integrere agurktestene med Spring Application Context. Til det opretter vi en ny klasse og kommenterer den med @SpringBootTest og @CucumberContextConfiguration:
@CucumberContextConfiguration @SpringBootTest offentlig klasse SpringIntegrationTest {// executeGet implementering}
Nu kan alle agurkdefinitioner gå i en separat Java-klasse, der udvides SpringIntegrationTest:
offentlig klasse StepDefs udvider SpringIntegrationTest {@When ("^ klienten kalder / version $") offentlig annullerer_client_issues_GET_version () kaster Throwable {executeGet ("// localhost: 8080 / version"); }}
Vi er alle klar til en testkørsel nu.
Endelig kan vi køre hurtigt via kommandolinjen ved blot at køre mvn ren installation -Pintegration - Maven udfører integrationstestene og viser resultaterne i konsollen.
3 scenarier ([32m3 bestået [0m) 9 trin ([32m9 bestået [0m) 0m1.054s Testkørsel: 12, Fejl: 0, Fejl: 0, Springet over: 0, Forløbet tid: 9.283 sek - i com.baeldung.CucumberTest 2016-07-30 06: 28: 20.142 INFO 732 --- [Thread-2] AnnotationConfigEmbeddedWebApplicationContext: Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext: startup date [Sat Jul 30 06:28:12 CDT 2016]; rod af konteksthierarki Resultater: Testkørsel: 12, Fejl: 0, Fejl: 0, Springet over: 0
4. Konklusion
Efter at have konfigureret agurk med fjeder, vil det være praktisk at bruge fjederkonfigurerede komponenter til BDD-test. Dette er en enkel guide til integration af agurktesten i en Spring-Boot-applikation.
Som normalt er alle kodeeksempler vist i denne vejledning tilgængelige på GitHub.