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.

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

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.