En Grails tengo un servicio que quiero probar en una unidad. El servicio utiliza estas importaciones:Grails/Groovy: utilizando múltiples @TestMixin
import grails.converters.JSON
import grails.web.JSONBuilder
Quiero que el servicio para hacer llegar los datos y convertirlo a JSON:
def tables = DataProfileStats.withCriteria {
projections {
distinct("tableName")
}
};
El método de ayuda que escribió para construir el JSON es:
public String buildNodeString(String nodeText)
{
def builder = new JSONBuilder();
JSON result = builder.build {
hello = "world"
};
return result.toString();
}
En la prueba de la unidad, tengo que agregar @TestMixin (ControllerUnitTestMixin) para que el adaptador JSON esté cargado. Pero también tengo que agregar @TestMixin (DomainClassUnitTestMixin) para poder simular el objeto de la base de datos.
¿Alguna idea sobre cómo tener múltiples @TestMixin o este es un problema de diseño cuando tengo una importación grails.web.JSONBuilder en una clase de servicio? De lo contrario, tengo que usar una biblioteca JAVA/JSON o poner las cosas JSON en un controlador.
Esto es lo que yo quiero la prueba para que parezca:
@TestMixin(ControllerUnitTestMixin)
@TestMixin(DomainClassUnitTestMixin)
class JsTreeJSONGeneratorServiceTests {
void testSomething() {
DataProfileStats stats1 = new DataProfileStats();
stats1.tableName = "table";
mockDomain(DataProfileStats, stats1);
JsTreeJSONGeneratorService service = new JsTreeJSONGeneratorService();
String json = service.buildNodeString();
assert json != "";
}
}
me siento un @TestMixin (ControllerUnitTestMixin) @TestMixin (DomainClassUnitTestMixin) JsTreeJSONGeneratorServiceTests clase {
void testSomething() {
DataProfileStats stats1 = new DataProfileStats();
stats1.tableName = "table";
mockDomain(DataProfileStats, stats1);
JsTreeJSONGeneratorService service = new JsTreeJSONGeneratorService();
String json = service.buildNodeString();
assert json != "";
}
}
me siento un @TestMixin (ControllerUnitTestMixin) @TestMixin (DomainClassUnitTestMixin) JsTreeJSONGeneratorServiceTests clase {
void testSomething() {
DataProfileStats stats1 = new DataProfileStats();
stats1.tableName = "table";
mockDomain(DataProfileStats, stats1);
JsTreeJSONGeneratorService service = new JsTreeJSONGeneratorService();
String json = service.buildNodeString();
assert json != "";
}
}
consigo un "No se puede especificar la anotación duplicado en el mismo miembro: grails.test.mixin. TestMixin "excepción.
Gracias
Felicidades por la solución. Cuando pueda, asegúrese de marcar su respuesta como 'aceptada' para que otros puedan aprender de su éxito. Saludos ~ –
Gracias, esto me ayudó (aunque estaba usando @Mock()). – duma