jueves, 8 de julio de 2010

Detalle minusculo al usar TagLibUnitTestCase

Este es un tip rápido al usar TagLibUnitTestCase, e infiero que sirve para invocar clases que utilicen mocks y que además se prueben mediante la invocación de closures.

Al utilizar TagLibUnitTestCase uno tiene la variable tagLib, que como tal es la instancia de la clase que estás probando, en mi caso yo uso algunas dependencias que utiliza mi libreria de tags y se las inyectaba de manera manual, pero al invocar el código de la siguiente manera:


tagLib.dojoField(
[bean:impuesto,field:"totalImpuestosRetenidos",
useLabelTemplate:true],null)


Pero la prueba unitaria fallaba, mandaba NullPointerException, curiosamente al invocar cualquier método de las dependencias, al realizar diversas pruebas me di cuenta que al invocar el closure de esa manera, se creaba una nueva instancia de tagLib, naturalmente, sin las dependencias que había inyectado previamente.

Para evitar caer en ese error, solo tenemos que invocar el closure a la manera "java", usando el método call() del closure:


tagLib.dojoField.call(
[bean:impuesto,
field:"totalImpuestosRetenidos",
useLabelTemplate:true],null)


Y de ésta manera no tendrá ese comportamiento extraño.

Cabe mencionar que probé en Grails 1.3.2