Buscar
Social
Ofertas laborales ES
« Google Code cierra sus puertas | Main | Duda sobre XML Schemas »
jueves
mar122015

Spock alcanza la versión 1.0

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. 

PrintView Printer Friendly Version

EmailEmail Article to Friend

References (1)

References allow you to track sources for this article, as well as articles that were written in response to this article.

Reader Comments

There are no comments for this journal entry. To create a new comment, use the form below.

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>