Teste com Spring e Spock
1. Introdução
Neste breve tutorial, mostraremos os benefícios de combinar o poder de suporte detesting framework deSpring Boot e a expressividade deSpock framework, seja por unidade ouintegration tests .
2. Configuração do Projeto
Vamos começar com um aplicativo da web simples. Ele pode cumprimentar, alterar a saudação e redefinir para o padrão com simples chamadas REST. Além da classe principal, usamos umRestController simples para fornecer a funcionalidade:
@RestController
@RequestMapping("/hello")
public class WebController {
@GetMapping
public String salutation() {
return "Hello world!";
}
}
Então o controlador cumprimenta com 'Hello world!'. A anotação@RestController eshortcut annotations garantem o registro do terminal REST.
3. MavenDependencies for Spock and Spring Boot Test
Começamos adicionando as dependências do Maven e, se necessário, a configuração do plug-in do Maven.
3.1. Adicionando dependências do Spock Framework com suporte a Spring
ParaSpock itself e paraSpring support, precisamos de duas dependências:
org.spockframework
spock-core
1.2-groovy-2.4
test
org.spockframework
spock-spring
1.2-groovy-2.4
test
Observe que as versões especificadas são uma referência à versão groovy usada.
3.2. Adicionando o Spring Boot Test
Para usar os utilitários de teste deSpring Boot Test, precisamos da seguinte dependência:
org.springframework.boot
spring-boot-starter-test
2.1.1.RELEASE
test
3.3. Configurando o Groovy
E como Spock é baseado emGroovy,we have to add and configure the gmavenplus-plugin as well to poderá usar esta linguagem em nossos testes:
org.codehaus.gmavenplus
gmavenplus-plugin
1.6
compileTests
Observe que, como só precisamos do Groovy para fins de teste, restringimos o objetivo do plugin acompileTest.
4. Carregando oApplicationContext em um Teste Spock
Um teste simples é paracheck if all Beans in the Spring application context are created:
@SpringBootTest
class LoadContextTest extends Specification {
@Autowired (required = false)
private WebController webController
def "when context is loaded then all expected beans are created"() {
expect: "the WebController is created"
webController
}
}
Para este teste de integração, precisamos iniciar oApplicationContext, que é o que@SpringBootTest faz por nós. Spock fornece a separação de seção em nosso teste com palavras-chave como “when”,“then” ou “expect”.
Além disso, podemos explorarGroovy Truth para verificar se um bean é nulo, como a última linha de nosso teste aqui.
5. UsandoWebMvcTest em um teste de Spock
Da mesma forma, podemos testar o comportamento doWebController:
@AutoConfigureMockMvc
@WebMvcTest
class WebControllerTest extends Specification {
@Autowired
private MockMvc mvc
def "when get is performed then the response has status 200 and content is 'Hello world!'"() {
expect: "Status is 200 and the response is 'Hello world!'"
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andReturn()
.response
.contentAsString == "Hello world!"
}
}
É importante notar que em nossos testes de Spock (ou melhor,Specifications) we can use all familiar annotations from the Spring Boot test framework that we are used to.
6. Conclusão
Neste artigo, explicamos como configurar um projeto Maven para usar Spock e a estrutura de teste Spring Boot combinados. Além disso, vimos como as duas estruturas se complementam perfeitamente.
Para um mergulho mais profundo, dê uma olhada em nossos tutoriais sobretesting with Spring Boot, sobreSpock frameworkeGroovy language.
Finalmente, o código-fonte com exemplos adicionais pode ser encontrado em nossoGitHub repository.