Lo + Leído
Eventos destacados
Artículos para tus primeros pasos
Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos:
- Introducción a Groovy, parte 1 (Andrés Almiray)
- Introducción a Groovy, parte 2 (Andrés Almiray)
- Introducción a Groovy, parte 3 (Andrés Almiray)
- Introducción a Grails (Material Seminario ImaginaWorks)
Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:
Grails
Problemas con los test de integración.
Pilli - miércoles 23/12/2009Hola a todos.
Tengo la versión 1.0.4 del manual de Nacho Brito sobre desarrollo web con Grails y he llegado a la parte debaterías de pruebas, las pruebas de unidad las he realizado sin problemas, pero me he atrancado en las de integración. Los 2 ejemplos de pruebas de integración que hay en el manual me fallan. El fallo es el mismo en las 2, es como si no se guardara el objeto Persona por lo que falla al referenciarlo.
Pongo el código de mis clases para ver si me podeis ayudar.
------------------------- GenteTest.groovy --------------------------------
import grails.test.*
class GenteTests extends GrailsUnitTestCase {
def genteService
protected void setUp() {
super.setUp()
}
protected void tearDown() {
super.tearDown()
}
void testToXML() {
Persona p = new Persona(
nombre:'Nacho',
apellidos:'Brito',
email:'nacho@imaginaworks.com'
).save(flush:true)
def gc = new GenteController()
gc.toXML()
def resp = gc.response
def xmlStr = resp.contentAsString
def listado = new XmlSlurper().parseText(xmlStr)
assertEquals resp.contentType, 'text/xml'
assertEquals 1, listado.persona.size()
assertEquals p.id, listado.persona[0].@id.text().toLong()
}
void testSave(){
def gc = new GenteController()
gc.genteService = genteService
gc.params.nombre = 'Francisco'
gc.params.apellidos = 'Ejemplo'
gc.params.email = 'jg@test.com'
def p = gc.save()
assertNotNull p
assertEquals 'Francisco',p.nombre
assertnotNull p.id
}
}
------------------------- GenteTest.groovy --------------------------------
------------------------- GenteController.groovy---------------------------
import grails.converters.XML
class GenteController {
def genteService
def index = {
redirect(action:toXML)
}
//URL: /gente/toXML
def toXML = {
/*
Definimos valores de ordenacion y paginacion por defecto.
*/
if (!params.max) params.max = 25
if (!params.offset) params.offset = 0
if (!params.order) params.order = 'id'
if (!params.sort) params.sort = 'desc'
//Generamos el listado en XML
render Persona.list() as XML
}
def save = {
def p = genteService.saveOrUpdate(params)
if (p.hasErrors()){
flash.message = 'Se produjeron errores'
}
return p
}
}
------------------------- GenteController.groovy---------------------------
------------------------- GenteService.groovy---------------------------
class GenteService {
boolean transactional = false
/*
Se asegura de que ambas personas se tengan como amigos
*/
def addToFriends(Persona p1, Persona p2) {
if (!p1.amigos.contains(p2)){
p1.amigos.add(p2)
}
if (!p2.amigos.contains(p1)){
p2.amigos.add(p1)
}
}
public Persona saveOrUpdate(params){
def p
if (params.id){
p = Persona.get(params.id)
}
else{
p = new Persona()
}
p.properties = params
p.save()
}
}
------------------------- GenteService.groovy---------------------------
El primer fallo me da en GenteTest.groovy en el método testToXML en "assertEquals 1, listado.persona.size()" dice que no hay personas.
El siguente fallo lo da en GenteController.groovy en la acción save en "p.hasErrors()" dice que no se puede invocar un metodo de un objeto nulo.
Por lo que he llegado a entender el fallo está al guardar el objeto persona, pero no logro arreglarlo.
¿Sabe alguién en qué me estoy equivocando?
Muchas gracias y felices fiestas a todos.
Re: Problemas con los test de integración.
Pilli - jueves 31/12/2009Hola.
Con la 1.1.2
Re: Problemas con los test de integración.
Nacho - martes 29/12/2009