Integração de Primavera de Pepino
1. Visão geral
O pepino é uma estrutura de teste muito poderosa, escrita na linguagem de programação Ruby, que segue a metodologia BDD (development-driven development). Sua intenção é permitir que os desenvolvedores escrevam casos de uso de alto nível em texto simples que possam ser verificados por partes interessadas não técnicas e os transformem em testes executáveis, escritos em uma linguagem chamada Gherkin.
Já discutimos isso em adifferent article.
E oCucumber-Spring Integration se destina a tornar a automação de teste mais fácil. Assim que tivermos os testes de pepino integrados ao Spring, poderemos executá-los junto com a compilação do Maven.
2. Dependências do Maven
Vamos começar a usar a integração Cucumber-Spring, definindo as dependências Maven - começando com a dependência Cucumber-JVM:
info.cukes
cucumber-java
1.2.4
test
A versão mais recente do Cucumber JVM pode ser encontradahere.
A seguir, adicionaremos a dependência de teste JUnit e Cucumber:
info.cukes
cucumber-junit
1.2.4
test
A versão mais recente do Cucumber JUnit pode ser encontradahere.
E, finalmente, a dependência da Primavera e do Pepino:
info.cukes
cucumber-spring
1.2.4
test
A versão mais recente do Cucumber Spring pode ser encontradahere.
3. Configuração
Vamos agora ver como podemos integrar o Cucumber em um aplicativo de serviço Spring Micro. A primeira etapa é criar um aplicativo Spring Boot - para o qual seguiremosSpring-Boot application article.
Em seguida, criaremos um serviço Spring REST no aplicativo de inicialização e escreveremos o teste Cucumber para este serviço REST.
3.1. Controlador REST
Como primeiro passo, vamos criar uma classe de controlador para uma API REST simples:
@RestController
public class VersionController {
@RequestMapping(method={RequestMethod.GET},value={"/version"})
public String getVersion() {
return "1.0";
}
}
3.2. Definições de etapas de pepino
O corredor JUnit usa a estrutura JUnit para executar o Teste de Pepino. Tudo o que precisamos é criar uma única classe vazia com uma anotação@RunWith(Cucumber.class):
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources")
public class CucumberTest {
}
Podemos ver a anotação@CucumberOptions em que especificamos a localização do arquivo Gherkin, também conhecido como arquivo de feição. Neste ponto, pepino reconhece a linguagem pepino; você pode ler mais sobre Gherkin no artigo mencionado na introdução.
Então agora vamos criar um arquivo de recurso de pepino:
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
E vamos dar uma olhada no arquivo de recurso. O cenário é fazer uma chamada GET para o serviço REST url/versione declarar a resposta.
A próxima etapa é criar o método na classe Java para corresponder a este caso de teste:
@When("^the client calls /version$")
public void the_client_issues_GET_version() throws Throwable{
executeGet("http://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));
}
Portanto, agora precisamos executar esses métodos de caso de teste de pepino usando Maven e Spring. Crie uma classe que possa ser executada com Spring-JUnit para que o Maven possa executar a classe de teste:
@ContextConfiguration(
classes = SpringDemoApplication.class,
loader = SpringApplicationContextLoader.class)
@WebAppConfiguration
@IntegrationTest
public class SpringIntegrationTest {
}
Agora todas as definições de pepino podem entrar em uma classe Java separada que se estende à classe Java mencionada acima:
public class StepDefs extends SpringIntegrationTest {
@When("^the client calls /version$")
public void the_client_issues_GET_version() throws Throwable {
executeGet("http://localhost:8080/version");
}
}
Estamos prontos para um teste agora.
Podemos fazer uma execução rápida via linha de comando, simplesmente executandomvn clean install -Pintegration – o Maven executará os testes de integração e mostrará os resultados no 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.example.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. Conclusão
Depois de configurar o Pepino com o Spring, será útil usar componentes configurados pelo Spring nos testes de BDD. Este é um guia simples para integrar o teste de pepino em um aplicativo Spring-Boot.
Você pode encontrar um projeto de exemplo com base no código deste artigo emlinked GitHub repository.