Grails: cargar datos de prueba


Al trabajar con pruebas unitarias o de integración siempre es necesario generar conjuntos de datos de pruebas, en Java por lo general se delega esta tarea a DBUnit o DBUnit / Spring –algunos se quejan de lo engorroso que puede llegar a ser el setup de las herramientas y hacen versiones propias en Scala!!!- pero la mayoría nos apegamos al libreto.

Sin embargo, desde que trabajaba con cakePHP 1.2 (lo sé, lo sé pero todos tenemos un pasado…) y aún con DBUnit / Spring me parecía ultra engorroso generar el grafo del modelo de dominio para hacer algunas pruebas unitarias….hasta que…conocí a grails.

En grails es posible usar dos plugins que evitan gran parte del trabajo (viva la flojera!): Fixtures y Build-test-data que permiten generar instancias validas de modelos de dominio reutilizables y desacoplados.

Build test data genera el grafo de datos de un objeto del modelo de dominio para que cumpla con todas las validaciones, permitiendo sobreescribir los valores de los atributos deseados, Fixtures permite generar instancias de modelos de dominio de forma sencilla inline o desde archivo usando un DSL que ahorra las operaciones de persistencia.

Solo un tip – que quizá no queda claro en la documentación – la forma de cargar un archivo con instancias de modelo de dominio válidas (es decir, llamar desde Fixtures a Build-test-data), en el archivo fixtures/modelos.groovy:

import com.MiDominio

build {
    instancia(MiDominio, nombre:"Atributo con valor definido de forma personalizada")
}

es fácil ver (jejeje me encanta la jerga de cálculo diferencial) que no usamos fixture {} sino build {}, luego en el test case:

@TestFor(MiDominio)
class MiDominioTests {
	
	def fixtureLoader
	
    void testDownloadAnnouncements() {
		def fixture = fixtureLoader.load("modelos")
		assertThat "Modelos loaded", fixture.instancia, notNullValue()
		
    }
}

Addendum: Si configuran grails 1.3.x o usan 2.0 con H2, recuerden mantener la configuración pooled = true a pesar de lo que diga la documentación del plugin.

Acerca de Nickman

Aunque crítico e Ingeniero (especializado en software), piloto de aeroplano soy (seré).

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s