Teste com Spring e Spock

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.