spock framework

20
Spock Framework Parte 1 Ismael Soares

Upload: ismael

Post on 11-Jun-2015

1.984 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Spock Framework

Spock FrameworkParte 1

Ismael Soares

Page 2: Spock Framework

Spock é um framework de testes para aplicações Java

e Groovy.

Page 3: Spock Framework

Diferenciais

JUnitCódigo bonito

Fácil de aprenderAltamente expressivo

Utiliza recursos da linguagem Groovy

Page 4: Spock Framework

Quem Usa?

GradleGrails

+++

Page 5: Spock Framework

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

Page 6: Spock Framework

// Executado antes de cada métododef setup() {}          

// Executado depois de cada método def cleanup() {}        

// Executado antes do primeiro métododef setupSpec() {}    

// Executado após o último métododef cleanupSpec() {}  

Ciclo de vida

Page 7: Spock Framework

1. Configura os recursos necessários para o teste.

1. Proporciona o estímulo para o teste

1. Descreve as respostas esperadas

1. Limpa os recursos utilizados no teste.

Fases

Page 8: Spock Framework

Blocos e fases

Page 9: Spock Framework

setup/given: // criar fixtures

when:   // estímulos

then && and:   // respostas

cleanup: // limpar fixtures

Fases

Page 10: Spock Framework

when:”incluir um elemento na pilha”pilha.push(elemento)

then:”ela não pode ficar vazia”!pilha.emptypilha.size() == 1 and:”deve conter o elemento incluído”pilha.peek() == elemento

Exemplo

Page 11: Spock Framework

Condition not satisfied:

pilha.size() == 2|     |      |   |     1      false[push me]

Resultado

Page 12: Spock Framework

when:”retirar os elementos de pilha vazia”pilha.pop()

then:”deve retornar Exception”def e = thrown(EmptyStackException)e.message == ‘bla’stack.empty

Exception

Page 13: Spock Framework

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

Page 14: Spock Framework

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

Page 15: Spock Framework

// Globalsetup:subscriber.isAlive() >> true

// Localwhen: publisher.send(event)then: 1 * subscriber.receive(event) //Válido para o que está acima

//Opicionalthen: subscriber.isAlive() >> true

//Obrigatóriothen: 1 * subscriber.isAlive() >> truethen: n * subscriber.receive(event)

//Cardinalidadesn * 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

//Regexsubscriber./set.*/(_) // qualquer setter que for chamado do subscriber

Interações

Page 16: Spock Framework

// sem argumentos subscriber.receive()            

// qualquer argumentosubscriber.receive(_)                  

// qualquer argumento não nulo subscriber.receive(!null)                

// argumento específicosubscriber.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

Page 17: Spock Framework

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 regexmock.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 varargmock.foo("one", "two")  

Page 18: Spock Framework

Na próxima apresentação...Na próxima apresentação...

Valores de retornoVerificações ordenadas

Bloco ExpectBloco CleanupBloco Where

Métodos HelperSpock Vs JUnit

Page 19: Spock Framework

ReferênciaReferência

http://code.google.com/p/spock/

Page 20: Spock Framework

ObrigadoObrigado