Spock alcanza la versiĆ³n 1.0
jueves, marzo 12, 2015 at 3:49PM
jtristan in spock

Spock es un framework de testeo y especificación para Java y Groovy. Se considera un framework de especificación porque testeamos comportamientos. Grails ha adoptado desde las últimas versiones a Spock como framework test.

Hace unos días se ha publicado la versión 1.0, aunque las versiones anteriores ya gozaban de una gran madurez. 

La principal característica de spock es su expresivo lenguaje de especificación, permitiéndonos que los propiostest se conviertan en nuestra mejor documentación. 

En spock disponemos de una serie de bloques que cubren todas las fases de un método de especificación. 


Todos los bloques pueden ir acompañados de un texto descriptivo:

when: "Valido la fortaleza de la contraseña"

then: "Debe al menos tener 8 caracteres para que sea fuerte"

Los nombres de las clases deben acabar en Spec (indicando que son una especificación) y deben extender de spock.lang.Specification.
El bloque setup no es obligatario ya que se crea siempre un bloque setup implícito. También se puede usar el alias given.
Los bloques then y when siempre van juntos. Nos indican que cuando algo sucede (el estímulo - when) qué respuesta esperamos (then).
En el bloque then podemos poner varias respuestas esperadas sin necesidad de utilizar asserts.

 

when:
stack.push(elem)

then:
!stack.empty
stack.size() == 1
stack.peek() == elem

También podemos comprobar las excepciones:

when:
stack.pop()

then:
thrown(EmptyStackException)
stack.empty

Cuando el comportamiento a comprobar es muy sencillo, y simplemente tendremos la condición y el resultado esperado podemos usar el bloque expect:

expect:
Math.max(1, 2) == 2

El bloque where nos va a permitir poder comprobar varias condiciones a la vez. Para ello, crearemos una tabla de datos con los valores que deben pasarse a las variables que espera el estímulo y a las respuestas.

class Math extends Specification {
    def "maximum of two numbers"(int a, int b, int c) {
        expect:
        Math.max(a, b) == c

        where:
        a | b | c
        1 | 3 | 3
        7 | 4 | 4
        0 | 0 | 0
    }
}

 

Como podéis ver spock tiene caracterísiticas que va a facilitar mucho la forma de poder expresar y comprender la especificación que deseamos comprobar. 

Article originally appeared on javaHispano (http://www.javahispano.org/).
See website for complete article licensing information.