Escribiendo Pruebas con
Spock
¿Y quién es éste tipo?
๏  Desarrollador

desde el inicio (1995 y contando …)

๏  Creyente fiel del Código Abierto y Libre
...
Que es spock?
Donde, Quien, Como?

Porque?

■  http://spockframework.org

■  Mayor expresividad

■  Peter Niederwiser @pni...
Primeras impresiones
import spock.lang.Specification
class HelloSpec extends Specification {
def "length of Spock's and hi...
Introduciendo un defecto
import spock.lang.Specification
class HelloSpec extends Specification {
def "length of Spock's an...
A wild error appears!

Condition not satisfied:
name.size() == length
|
|
| |
|
6
| 7
Scotty
false
<Click to see differenc...
Caracteristicas (1)
Bloques
■  given:

precondiciones, inicializacion de datos, etc.

■  when:

acciones que producen un r...
Caracteristicas (2)

Ciclo de Vida

Dirigido por Datos

■  setup

■  Variables ligadas a
Listas

■  cleanup
■  setupSpec
■...
Unrolling
import spock.lang.Specification
import spock.lang.Unroll
@Unroll
class HelloSpec extends Specification {
def "Le...
Unrolling visto por un IDE

www.canoo.com

10
Interactiones (Mocks)
import spock.lang.Specification
import java.beans.PropertyChangeListener
class Model {
@groovy.beans...
Espere, aun hay mas!

■  http://docs.spockframework.org/en/latest/
■  Spock es extendible via plugins
■  Pruebas funcional...
Gracias!
twitter: @aalmiray
Upcoming SlideShare
Loading in …5
×

Spock

2,433 views
2,259 views

Published on

Para muchos escribir codigo de pruebas resulta tan gratificante como asistir al dentista un Lunes de madrugada. JUnit es ampliamente conocido en la industria sin embargo su utilizacion o buen uso no lo son. ¿Qué se puede hacer al respecto para remediar este embrollo?

Permitanme presentarles a Spock, un proyecto revolucionario diseñado especificamente para facilitar la escritura de codigo de pruebas. Durante la sesion conoceremos los fundamentos para realizar pruebas efectivas con Spock, asi como tambien una comparativa entre las caracteristicas de JUnit y Spock. Se recomienda tener conocimientos basicos del lenguage Groovy, pero este no es un requisito indispensable.

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

  • Be the first to like this

No Downloads
Views
Total views
2,433
On SlideShare
0
From Embeds
0
Number of Embeds
2,020
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Spock

  1. 1. Escribiendo Pruebas con Spock
  2. 2. ¿Y quién es éste tipo? ๏  Desarrollador desde el inicio (1995 y contando …) ๏  Creyente fiel del Código Abierto y Libre ๏  Miembro del equipo ๏  Líder del proyecto ๏  Actualmente trabajando con www.canoo.com 2
  3. 3. Que es spock? Donde, Quien, Como? Porque? ■  http://spockframework.org ■  Mayor expresividad ■  Peter Niederwiser @pniederw ■  Facil de aprender ■  Lenguage para pruebas basado en Groovy ■  Manipulacion de codigo byte en tiempo de compilacion ■  Inspirado en JUnit, Rspec, jMock, Mockito, Groovy, Scala y Vulcans www.canoo.com ■  Use multivariado (unitario a funcional) ■  Potencializa la la sintaxis idiomatica de Groovy ■  Compatible con Junit, IDEs, CI. ■  Extendible via plugins 3
  4. 4. Primeras impresiones import spock.lang.Specification class HelloSpec extends Specification { def "length of Spock's and his friends' names"() { expect: name.size() == length where: name "Spock" "Kirk" "Scotty" } | | | | length 5 4 6 } www.canoo.com 4
  5. 5. Introduciendo un defecto import spock.lang.Specification class HelloSpec extends Specification { def "length of Spock's and his friends' names"() { expect: name.size() == length where: name "Spock" "Kirk" "Scotty" } | | | | length 5 4 7 } ! www.canoo.com 5
  6. 6. A wild error appears! Condition not satisfied: name.size() == length | | | | | 6 | 7 Scotty false <Click to see difference> at HelloSpec.length of Spock's and his friends' names(HelloSpec.groovy:5) www.canoo.com 6
  7. 7. Caracteristicas (1) Bloques ■  given: precondiciones, inicializacion de datos, etc. ■  when: acciones que producen un resultado ■  then: verificacion de expectativas ■  expect: alternativa corta a when: y then: ■  where: aplica entradas de datos varias ■  and: sub-dividide (y enlaza) bloques ■  setup: otro nombre para given: ■  cleanup: post condiciones, limpieza de recursos, etc. www.canoo.com 7
  8. 8. Caracteristicas (2) Ciclo de Vida Dirigido por Datos ■  setup ■  Variables ligadas a Listas ■  cleanup ■  setupSpec ■  cleanupSpec ■  Variables ligadas a Tablas ■  @Unroll ■  @Shared www.canoo.com 8
  9. 9. Unrolling import spock.lang.Specification import spock.lang.Unroll @Unroll class HelloSpec extends Specification { def "Length of #name should be #name.size(), value is #length"() { expect: name.size() == length where: name | length "Spock" | 5 "Kirk" | 4 "Scotty" | 6 } } www.canoo.com 9
  10. 10. Unrolling visto por un IDE www.canoo.com 10
  11. 11. Interactiones (Mocks) import spock.lang.Specification import java.beans.PropertyChangeListener class Model { @groovy.beans.Bindable String name } class BindableSpec extends Specification { def "Model properties are observable"() { given: def model = new Model() def listener = Mock(PropertyChangeListener) when: model.addPropertyChangeListener(listener) model.name = 'Groovy' model.name = 'Java' then: 1 * listener.propertyChange({it.newValue == 'Groovy'}) 1 * listener.propertyChange({it.newValue == 'Java'}) } } www.canoo.com 11
  12. 12. Espere, aun hay mas! ■  http://docs.spockframework.org/en/latest/ ■  Spock es extendible via plugins ■  Pruebas funcionales para aplicaciones web con GEB ■  Plugins para Grails y Griffon ■  Siguiente liberacion sera el codiciado 1.0.0 www.canoo.com 12
  13. 13. Gracias! twitter: @aalmiray

×