Spock é um framework de testes para Java e Groovy que oferece código limpo e fácil de ler, além de ser altamente expressivo. Ele utiliza recursos da linguagem Groovy e é usado por ferramentas como Gradle e Grails. Spock permite definir dados de entrada e saída esperada para os testes, além de limpar recursos utilizados após cada execução por meio de blocos setup, given, when, then e cleanup.
5. import spock . lang .* class HelloSpock extends spock . lang . Specification { def "length of Spock's and his friends' names" () { expect : name . size () == length where : name | length "Spock“ | 5 "Kirk" | 4 "Scotty" | 6 } } Exemplo
6. // Executado antes de cada método def setup () {} // Executado depois de cada método def cleanup () {} // Executado antes do primeiro método def setupSpec () {} // Executado após o último método def cleanupSpec () {} Ciclo de vida
12. when :”retirar os elementos de pilha vazia” pilha . pop () then :”deve retornar Exception” def e = thrown ( EmptyStackException ) e.message == ‘bla’ stack . empty Exception
13. def "HashMap accepts null key" () { given :“um mapa” def map = new HashMap () when :”incluir um elemento com a chave null” map . put ( null , "elem" ) then :”não deve retornar exception” notThrown ( NullPointerException ) } Exception
15. // Global setup : subscriber . isAlive () >> true // Local when : publisher . send ( event ) then : 1 * subscriber . receive ( event ) //Válido para o que está acima //Opicional then : subscriber . isAlive () >> true //Obrigatório then : 1 * subscriber . isAlive () >> true then : n * subscriber . receive ( event ) //Cardinalidades n * subscriber . receive ( event ) // exatamente n vezes ( n .. _ ) * subscriber . receive ( event ) // as vezes pelo menos n vezes ( _ .. n ) * subscriber . receive ( event ) // no máximo n vezes //Regex subscriber ./ set .*/( _ ) // qualquer setter que for chamado do subscriber Interações
16. // sem argumentos subscriber . receive () // qualquer argumento subscriber . receive ( _ ) // qualquer argumento não nulo subscriber . receive (! null ) // argumento específico subscriber . receive ( event ) // qualquer argumento diferente do específico subscriber . receive (! event ) // qualquer argumento do tipo Message (não nulo) subscriber . receive ( _ as Message ) // constraint customizada subscriber . receive ( { it . priority >= 5 } ) Restrições de Argumentos
17. Para métodos que usam vários argumentos // qualquer três argumentos mock . foo ( _ , _ , _ ) // qualquer argumento no primeiro, não nulo no segundo e no terceiro, uma regex mock . foo ( _ , ! null , { it ==~ / a * b / }) // restrições para varargs podem ser especificadas em estilo de lista ou estilo vararg: def foo(String... args) // estilo lista mock . foo ([ "one" , "two" ]) // estilo vararg mock . foo ( "one" , "two" )
18. Na próxima apresentação... Valores de retorno Verificações ordenadas Bloco Expect Bloco Cleanup Bloco Where Métodos Helper Spock Vs JUnit
Altamente expressivo: escrevemos o código da mesma forma que fariamos para nos expressar. JUnit: compatível com diversas IDEs, ferramentas de build e testes de integração contínua.
Gradle (grueilou): trata-se de um sistema de build baseado em Groovy que trás a expressividade desta linguagem para o mecanismo de build, o que torna nossos scripts muito mais legíveis e fáceis de escrever.
Spock tem suporte embutido para a execução de cada uma das fases conceituais de um método. Para este fim, métodos são estruturados em blocos.
Frases nos blocos são opcionais: As condições são escritas como expressões booleana ssimples, eliminando a necessidade de uma afirmação API.
Como você pode ver, Spock captura todos os valores produzidos durante a avaliação de uma condição, e apresenta-os numa forma facilmente de entender.
Clique 2 vezes Eventos são publicados para todos os assinantes subscriber: assinantes Publisher: editora Receive: ruecive (receber)