jueves, 29 de noviembre de 2012

Introducción a Spock - Parte 2


Un poco de Feature Methods Blocks...


Estos simpáticos bloques son los que encontramos dentro de nuestros métodos de prueba. Los que tenemos al día de hoy son:

import spock.lang.*;

class MySecondSpecification extends Specification {

   //Setup: (or Given:)
   //Expect:
   //When:
   //Then:
   //Where:
      //and:
      //and:
   //Cleanup:

}

Un repaso rápido de que significa cada uno...

  • Setup: Se explica por si mismo, aquí deberíamos colocar todo lo relativo al setup de la prueba.
  • Expect: Es algo similar a lo que haría un assert en el viejo JUnit, se espera un estimulo y su correspondiendo respuesta. 
  • When/Then: Autoexplicativo también!
  • Where: Es en algun sentido similar al Expect pero tiene un poco mas de maleabilidad para evaluacion de tablas, listas y otras cosas mas. También se puede combinar con el and: si es necesario para que nuestro código quede mas limpio.
  • Cleanup: Lo típico, cierre de conexiones, archivos,  o lo que sea necesario.

Nuestros Features Methods deberían contener al menos un bloque sino el método no sera considerado como tal.


Fields...

Tenemos 2 tipos de fields, los "shareables" y los "no shareables". Los "shareables" son aquellos que son costos de instanciar y que necesitamos compartirlos a través de todos las pruebas, como puede ser una conexión a una base de datos.

Por otro lado los "no shareables" son aquellos objetos que no nos interesa compartir su estado a través de las distintas pruebas. Hay que tener en cuenta un punto muy importante y es que estos se "reinstancian" con la ejecución de cada prueba.


class SharedOrNotSharedSpecification extends Specification {

   @Shared expensiveResource = new expensiveResource()
   cheapResource = new cheapResource()

   .
   .
   .

}