Cetriolo Spring Integration

1. Panoramica

Cucumber è un framework di test molto potente scritto nel linguaggio di programmazione Ruby, che segue la metodologia BDD (behavior-driven development). Consente agli sviluppatori di scrivere casi d'uso di alto livello in testo normale che possono essere verificati da parti interessate non tecniche e trasformarli in test eseguibili, scritti in un linguaggio chiamato Gherkin.

Ne abbiamo già discusso in un altro articolo.

E l'integrazione Cucumber-Spring ha lo scopo di rendere più facile l'automazione dei test. Una volta che abbiamo integrato i test Cucumber con Spring, dovremmo essere in grado di eseguirli insieme alla build di Maven.

2. Dipendenze di Maven

Iniziamo a utilizzare l'integrazione Cucumber-Spring definendo le dipendenze Maven, a partire dalla dipendenza Cucumber-JVM:

 io.cucumber cucumber-java 6.8.0 test 

Possiamo trovare la versione più recente di Cucumber JVM qui.

Successivamente, aggiungeremo la dipendenza di test JUnit e Cucumber:

 io.cucumber cucumber-junit 6.8.0 test 

La versione più recente di Cucumber JUnit può essere trovata qui.

E infine, la dipendenza Primavera e Cetriolo:

 io.cucumber cucumber-spring 6.8.0 test 

Di nuovo, possiamo dare un'occhiata alla versione più recente di Cucumber Spring qui.

3. Configurazione

Vedremo ora come integrare Cucumber in un'applicazione Spring.

Innanzitutto, creeremo un'applicazione Spring Boot, per la quale seguiremo l'articolo sull'applicazione Spring-Boot. Quindi, creeremo un servizio Spring REST e scriveremo il test Cucumber per esso.

3.1. Controller REST

Per prima cosa, creiamo un semplice controller:

@RestController public class VersionController { @GetMapping("/version") public String getVersion() { return "1.0"; } }

3.2. Definizioni dei passaggi di cetriolo

Tutto ciò di cui abbiamo bisogno per eseguire i nostri test Cucumber con JUnit è creare una singola classe vuota con un'annotazione @RunWith (Cucumber.class) :

@RunWith(Cucumber.class) @CucumberOptions(features = "src/test/resources") public class CucumberIntegrationTest { }

Possiamo vedere l'annotazione @CucumberOptions in cui stiamo specificando la posizione del file Gherkin, noto anche come file di funzionalità. A questo punto, Cucumber riconosce la lingua Gherkin; puoi leggere di più su Gherkin nell'articolo menzionato nell'introduzione.

Quindi ora, creiamo un file di funzionalità Cucumber:

Feature: the version can be retrieved Scenario: client makes call to GET /version When the client calls /version Then the client receives status code of 200 And the client receives server version 1.0

Lo scenario consiste nell'eseguire una chiamata GET all'URL / versione del servizio REST e verificare la risposta.

Successivamente, dobbiamo creare un cosiddetto codice colla. Questi sono metodi che collegano un singolo passaggio Gherkin con il codice Java.

Dobbiamo opzioni qui: possiamo usare espressioni di cetriolo o espressioni regolari all'interno delle annotazioni. Nel nostro caso, ci atterremo alle espressioni regolari:

@When("^the client calls /version$") public void the_client_issues_GET_version() throws Throwable{ executeGet("//localhost:8080/version"); } @Then("^the client receives status code of (\\d+)$") public void the_client_receives_status_code_of(int statusCode) throws Throwable { HttpStatus currentStatusCode = latestResponse.getTheResponse().getStatusCode(); assertThat("status code is incorrect : "+ latestResponse.getBody(), currentStatusCode.value(), is(statusCode)); } @And("^the client receives server version (.+)$") public void the_client_receives_server_version_body(String version) throws Throwable { assertThat(latestResponse.getBody(), is(version)); }

Quindi ora integriamo i test Cucumber con il contesto dell'applicazione Spring. Per questo, creeremo una nuova classe e la annoteremo con @SpringBootTest e @CucumberContextConfiguration :

@CucumberContextConfiguration @SpringBootTest public class SpringIntegrationTest { // executeGet implementation }

Ora tutte le definizioni di Cucumber possono andare in una classe Java separata che estende SpringIntegrationTest :

public class StepDefs extends SpringIntegrationTest { @When("^the client calls /version$") public void the_client_issues_GET_version() throws Throwable { executeGet("//localhost:8080/version"); } }

Siamo tutti pronti per un test ora.

Infine, possiamo eseguire una rapida esecuzione tramite la riga di comando, semplicemente eseguendo mvn clean install -Pintegration - Maven eseguirà i test di integrazione e mostrerà i risultati nella console.

3 Scenarios ([32m3 passed[0m) 9 Steps ([32m9 passed[0m) 0m1.054s Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.283 sec - in 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]; root of context hierarchy Results : Tests run: 12, Failures: 0, Errors: 0, Skipped: 0 

4. Conclusione

Dopo aver configurato Cucumber con Spring, sarà utile utilizzare i componenti configurati con Spring nei test BDD. Questa è una semplice guida per integrare il test Cucumber in un'applicazione Spring-Boot.

Come al solito, tutti gli esempi di codice mostrati in questo tutorial sono disponibili su GitHub.