Spock Framework

2,568 views
2,492 views

Published on

Introdução ao framework dinâmico para testar aplicações Java e/ou Groovy.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,568
On SlideShare
0
From Embeds
0
Number of Embeds
1,143
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 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)
  • Spock Framework

    1. 1. Spock Framework Parte 1 Ismael Soares
    2. 2. Spock é um framework de testes para aplicações Java e Groovy.
    3. 3. Diferenciais JUnit Código bonito Fácil de aprender Altamente expressivo Utiliza recursos da linguagem Groovy
    4. 4. Quem Usa? Gradle Grails + + +
    5. 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. 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
    7. 7. <ul><li>Configura os recursos necessários para o teste. </li></ul><ul><li>Proporciona o estímulo para o teste </li></ul><ul><li>Descreve as respostas esperadas </li></ul><ul><li>Limpa os recursos utilizados no teste. </li></ul>Fases
    8. 8. Blocos e fases
    9. 9. setup/given: // criar fixtures when :   // estímulos then && and :   // respostas cleanup: // limpar fixtures Fases
    10. 10. when :”incluir um elemento na pilha” pilha . push ( elemento ) then :”ela não pode ficar vazia” ! pilha . empty pilha . size () == 1 and :”deve conter o elemento incluído” pilha . peek () == elemento Exemplo
    11. 11. Condition not satisfied : pilha . size () == 2 |     |       |   |     1       false [ push me ] Resultado
    12. 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. 13. def &quot;HashMap accepts null key&quot; () {   given :“um mapa”   def map = new HashMap ()     when :”incluir um elemento com a chave null”   map . put ( null , &quot;elem&quot; )     then :”não deve retornar exception”   notThrown ( NullPointerException ) } Exception
    14. 14. def &quot;events are published to all subscribers&quot; () {   setup : def subscriber1 = Mock ( Subscriber )   def subscriber2 = Mock ( Subscriber )   def publisher = new Publisher ()   publisher . add ( subscriber1 )   publisher . add ( subscriber2 )     when :   publisher . fire ( &quot;event&quot; )     then :   1 * subscriber1 . receive ( &quot;event&quot; )   1 * subscriber2 . receive ( &quot;event&quot; ) //Alternativa (qualquer mock) 2 * _. receive ( &quot;event&quot; ) } Interações
    15. 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. 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. 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 ([ &quot;one&quot; , &quot;two&quot; ]) // estilo vararg mock . foo ( &quot;one&quot; , &quot;two&quot; )  
    18. 18. Na próxima apresentação... Valores de retorno Verificações ordenadas Bloco Expect Bloco Cleanup Bloco Where Métodos Helper Spock Vs JUnit
    19. 19. Referência http://code.google.com/p/spock/
    20. 20. Obrigado

    ×