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