Como escrever testes utilizando Spock Framework

Por Felix Ricardo Gilioli em 14 de fevereiro de 2023

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.

1
Figure 1. Resultado ao executar o código de teste

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

2
Figure 2. 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.

// Compartilhe esse Post

💫
🔥 NOVO APP

Domine o Inglês em 30 dias!

Inteligência Artificial + Repetição Espaçada • Método cientificamente comprovado

✅ Grátis para começar 🚀 Resultados rápidos
×