• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Spock Framework
 

Spock Framework

on

  • 1,985 views

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

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

Statistics

Views

Total Views
1,985
Views on SlideShare
1,219
Embed Views
766

Actions

Likes
1
Downloads
7
Comments
0

3 Embeds 766

http://d.hatena.ne.jp 625
http://blog.bluesoft.com.br 140
https://www.google.co.jp 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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 Spock Framework Presentation Transcript

  • Spock Framework Parte 1 Ismael Soares
  • Spock é um framework de testes para aplicações Java e Groovy.
  • Diferenciais JUnit Código bonito Fácil de aprender Altamente expressivo Utiliza recursos da linguagem Groovy
  • Quem Usa? Gradle Grails + + +
  • 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
  • // 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
    • Configura os recursos necessários para o teste.
    • Proporciona o estímulo para o teste
    • Descreve as respostas esperadas
    • Limpa os recursos utilizados no teste.
    Fases
  • Blocos e fases
  • setup/given: // criar fixtures when :   // estímulos then && and :   // respostas cleanup: // limpar fixtures Fases
  • 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
  • Condition not satisfied : pilha . size () == 2 |     |       |   |     1       false [ push me ] Resultado
  • when :”retirar os elementos de pilha vazia” pilha . pop () then :”deve retornar Exception” def e = thrown ( EmptyStackException ) e.message == ‘bla’ stack . empty Exception
  • 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
  • def "events are published to all subscribers" () {   setup : def subscriber1 = Mock ( Subscriber )   def subscriber2 = Mock ( Subscriber )   def publisher = new Publisher ()   publisher . add ( subscriber1 )   publisher . add ( subscriber2 )     when :   publisher . fire ( "event" )     then :   1 * subscriber1 . receive ( "event" )   1 * subscriber2 . receive ( "event" ) //Alternativa (qualquer mock) 2 * _. receive ( "event" ) } Interações
  • // 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
  • // 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
  • 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" )  
  • Na próxima apresentação... Valores de retorno Verificações ordenadas Bloco Expect Bloco Cleanup Bloco Where Métodos Helper Spock Vs JUnit
  • Referência http://code.google.com/p/spock/
  • Obrigado