Bem-vindo ao meu blog

Compartilhando conhecimento sobre tecnologia, programação e mais!

Como escrever testes utilizando Spock Framework

Publicado em: 12 de March de 2019 | Categorias: Java
Como escrever testes utilizando Spock Framework

Se você trabalha com Java a algum tempo, já deve ter utilizado JUnit para escrever seus testes. JUnit é um excelente framework que é integrado com várias IDE’s de desenvolvimento, ferramentas de Build e servidores de integração contínua.

Neste artigo, irei mostrar uma forma mais elegante de escrever seus testes, para isso utilizaremos um framework chamado Spock, que utiliza todos os benefícios que o JUnit oferece, entre muitos outros.

Spock é um framework de testes escrito em Groovy. Para quem não conhece, Groovy é uma linguagem de programação que assim como Java, roda em uma JVM, sendo assim, ela se torna interoperável com Java. Uma das vantagens de utiliza-la para escrever os testes, é que ela deixa o código bem mais limpo e legível.

Iremos começar criando um projeto Maven e adicionando a seguinte dependência.

    
    <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-core</artifactId>
        <version>2.0-groovy-3.0</version>
        <scope>test</scope>
    </dependency>
    

Certifique-se de que seu projeto contém a depêndencia do jUnit.

Após isso, vamos criar uma classe em Java que conterá um único método responsável por concatenar duas string.

    
    //ConcatenaStrings.java
    public class ConcatenaStrings {

        public String concatena(String a, String b) {
            return a.concat(b);
        }
    }
    

Agora vamos começar a escrever nossos testes utilizando Groovy, para isso, crie um arquivo com a extensão .groovy e dentro dele crie uma classe de maneira semelhante a como faríamos em Java. Esta classe deve herdar de Specification, que faz parte do framework Spock, necessário para executar nossos testes.

    
    //ConcatenaStringsSpec.groovy
    import spock.lang.Specification
    class ConcatenaStringsSpec extends Specification {
    }
    

Agora vamos criar um método para testar se o tamanho da String retornanda ao chamar o método concatena esta correto. Em Groovy, podemos criar métodos com nomes flexíveis, eliminamos a necessidade de ter que dar um nome utilizando de anotações.

    
    def "tamanho da string retornada esta ok"() {
    }
    

Devemos dizer para o Spock oque esperamos que aconteça ao rodar o código, mas antes, para ter certeza que o método esta funcionando, queremos testa-lo com vários valores diferentes, a forma mais simples de fazer isso seria chamar o método várias vezes passando em cada vez um valor diferente, porém, com a ajuda do Spock, isso não é necessário, veja o exemplo.

    
    def "tamanho da string retornada esta ok"() {
        expect:
        new ConcatenaStrings().concatena(a, b).length() == c

        where:
        a       | b          || c
        "Felix" | " Gilioli" || 13
        "um"    | "dois"     || 6
        "1"     | "2"        || 2
    }
    

O código acima, vai executar tudo que esta dentro de expect para cada uma das condições declaradas em where. Veja o resultado ao executar nosso teste.

Resultado ao executar o código de teste.

Caso algum dos testes falhe, uma mensagem no console será exibida.

Resultado no console quando algum teste falhar.

Conclusão

Este foi um exemplo simples de como utilizar o Spock para escrever seus testes, caso tenha gostado e deseja aprender mais, eu recomendo dar uma lida na documentação e olhar alguns exemplos no GitHub. Para quem deseja utiliza-lo em projetos maiores, o Spock é uma ótima escolha, ele tem suporte para frameworks como Spring Boot e funciona muito bem, vale a pena estuda-lo.