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"
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.