Taverna /dev/All

Spock framework

Bom dia, conheci o spock tem uma semana, alguém usando ele com sucesso ? vale apena trocar do junit ? o que vcs podem me falar o spock pra testar projetos java ?

O Spock se tornou o framework de testes padrão do Grails lá pelas versões 2.3, 2.4 se não me engano.

Há coisas nele que são legais, e outras que nem tanto.

O que acho legal

A aplicação do BDD é muito bacana, ele te ensina a pensar em BDD. Outra coisa que acho muito legal é a possibilidade de você poder escrever especificações baseadas em dados (tabelas). Isto também é muito bacana.

O que não acho tão legal

Acho ele declarativo demais. Muitas vezes você quer fazer algo simples, como iterar sobre uma lista pra verificar condições nos itens da mesma e isto pode ser um pouco chato de ser feito inicialmente pelo Spock.

Muitas vezes o teste é escrito proceduralmente mesmo, este exemplo do loop acima, ou mesmo condicionais. Nestes pontos acho que o Spock ainda te prende um pouco.

Pessoalmente, fiquei um tempo no Spock, fiquei preso a ele no Groovy e, posteriormente, acabei voltando pro jUnit.

Dica de leitura: este livro da Casa do Código, é muito bom! - Livro de Spock Framework - Casa do Código

o que fez vc voltar ao junit ? volto pro junit 5 ?

O que me fez voltar pro jUnit foi não ser tão declarativo quanto o Spock.

Além disto o suporte é quase nativo no caso do Java, que é aonde uso mais. Tirando isto, o Spock tem ferramentas realmente muito legais, muito interessante, mas o estilo que me força a adotar realmente… acabo sempre voltando pro jUnit (talvez seja culpa mais minha que do Spock inclusive)

Spock eu considero melhor que o junit, mesmo o junit 5. O spock sozinho abrange muita coisa, e pelo fato de ser mais declarativo, principalmente quando se vai testar regras de negocio mais complexas, a manutenabilidade dos testes fica muito mais simples,e também substitui libs como mockito. Mas acho que o toque de magia mesmo é o fato dele usar groovy e prover dsl em volta, então dá bastante liberdade na hora de escrever os testes, junit + java puro + mockito dependendo da codebase chega dar desgosto na hora de escrever um teste novo ou dar manutenção em um antigo.

George, na minha opinião o Spock é o melhor framework de testes disponível na JVM. Os testes realizados com ele são muito mais semânticos, ou seja, fica bem fácil de escrever e ler. O Groovy permite uma sintaxe muito agrádavel, do tipo (exemplo bem tosko):

when: "Lista os livros"
def livros = livroService.list()

then: "O tamanho da lista é 8"
livros.size() == 8

Tem muitos outros recursos bacanas como data tables (Data Driven Testing).

Recentemente, o JUnit avançou bastante e igualou recursos que antes só existiam no Spock, mas na minha opinião o Spock ainda leva grande vantagem pela sua expressividade e simplicidade de uso.

Se você e sua equipe “não tiverem nojinho” de usar Groovy e Java juntos, vale muito a pena :smiley:

Mas é claro, que quem não está acostumado com Groovy pode levar um tempo (curto) para se acostumar.

Gosto muito desse vídeo aqui: Micronaut Testing Best Practices - YouTube

Nele, o Spock é usado para testar um código escrito no framework Micronaut, mas dá para você pegar as ideias e aplicar em qualquer projeto.

1 Curtida

itexto