NOTA: Comencé este artículo a la vez que profundizaba en la creación de test con Grails y me he ido encontrado cosas que me dejaron confuso y el post ha quedado un poco raro, pero he decidido dejarlo como originalmente lo escribí. Buscando por la red encontré distintas formas de implementar test, supongo que anclados a diferentes versiones del framework, y esto me lío un poco. Por este motivo no pongo código concreto, sino teoría de como Grails afronta los distintos "tipos de test". Para resolver mis dudas voy a usar código, la mejor herramienta :)

========================================================================================

Buenas a tod@s,

aquí vuelvo dispuesto a cumplir mis propósitos de vacaciones y, para ello, nada mejor que ponerse a programar :D Y aprender Groovy, Grails y todo lo que se ponga por delante.

Ayer estuve googleando en busca de recursos sobre TDD + Grails y no encontré gran cosa (también soy consciente que TDD no va anclado a un lenguaje sino que como técnica es agnóstica a estos). Aquí pongo unas diapositivas que fue de lo más explicativo que pude ver:

Por tanto, basándome en el último post de @ialcazar en @farmerdev, voy a empezar aprendiendo a hacer test en Grails. Conociendo las herramientas que nos ofrece para ello, sus ventajas y carencias. En la presentación anterior algo se puede ver sobre las opciones pero yo recomiendo el libro de @nacho_brito totalmente en español con un capítulo sobre el tema (y, básicamente, el guión que voy a seguir).

Tipos de test en Grails
Para empezar hay que conocer que tipos de test hay y cuál utilizar en cada momento. Un buena guía para ello, ya que el concepto de test no va anclado a un lenguaje de programación concreto, es el libro de @carlosble que ya comenté anteriormente. No voy a profundizar y voy a indicar brevemente que hay, de abajo a arriba, en Grails:
  • Test unitarios: Son aquellos que tiene como objetivo probar, de forma aislada, el comportamiento de un método de una clase. Si tiene varios "escenarios de ejecución" se encarga solo de uno de ellos. Las características se pueden agrupar en las siglas FIRST (Fast, Independent, Repeatable, Small y Transparent). En Grails, cuando se ejecutan las pruebas unitarias de un método, no se inyectan ninguno de los métodos dinámicos con los que se cuenta en producción. El desarrollador es responsable de crear y gestionar los objetos que intervienen.
  • Test de integración: Las pruebas de integración son aquella que combinan varias piezas del sistema y las testean en conjunto. En Grails, como se tiene en cuenta el contexto, los componentes tendrán acceso al entorno completo que, en test unitarios, no se levantaba.
  • Test funcionales: Este tipo de test atraviesan verticalmente el sistema, ya que pueden ir de extremo a extremo del mismo, para probar una funcionalidad concreta desde el cliente hasta la base de datos. También le podríamos llamar Test de Sistema pero bueno, nos quedamos con "funcional" porque así aparece en la literatura Grails. Básicamente, se trata de probar desde la capa de presentación algún comportamiento concreto del sistema. Grails no tiene "integrado" una herramienta para tal propósito pero se recomienda el uso de Canoo Web Test instalable mediante plugin.
Como he puesto en la nota de arriba me he encontrado con una serie de dudas al ponerme a hacer test en Grails. Voy a plantear aquí también las cuestiones por si alguien fuera tan amable de aclararme el tema:
Debido a que mi intención es hacer TDD para el proyecto no quiero usar comandos de generación de artefactos, ya que, estos directamente crean sus test y sus cosillas varias. La cosa era ir creando entidades y servicios según los vaya necesitando y, por tanto, debo conocer bien los tipos de test que puedo hacer en Grails, de donde extienden, que aporta cada uno para realizar las pruebas, etc. Esto me ha llevado a encontrar sitios donde se usa "GroovyTestCase" para todos los tipos de test, otros que usan "GrailsUnitTestCase" y "GrailsControllerTestCase" para unitarios e integración respectivamente y otros que usan "GrailsUnitTestCase" para ambos... un lío (para mí).
En la lista de [grailsEnCastellano] me han aportado buenas respuestas y aquí pongo un link de la guía oficial de Grails (versión 1.2.1 que voy a usar). En principio usar "GrailsUnitTestCase" para los unitarios (y primeros test que voy a escribir) y luego ya veremos donde uso "GrailsControllerTestCase" y "GroovyTestCase" (de este último extienden los dos anteriores).
Saludos! :D