Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spock Framework

3,204 views

Published on

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

Published in: Technology
  • Be the first to comment

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

×