В Grails у меня есть служба, которую я хочу протестировать. Служба использует эти импорты:
import grails.converters.JSON
import grails.web.JSONBuilder
Я хочу, чтобы служба получала данные и преобразовывала их в JSON:
def tables = DataProfileStats.withCriteria {
projections {
distinct("tableName")
}
};
Вспомогательный метод, который я написал для создания JSON:
public String buildNodeString(String nodeText)
{
def builder = new JSONBuilder();
JSON result = builder.build {
hello = "world"
};
return result.toString();
}
В модульном тесте я должен добавить @TestMixin(ControllerUnitTestMixin), чтобы загрузился адаптер JSON. Но мне также нужно добавить @TestMixin(DomainClassUnitTestMixin), чтобы я мог издеваться над объектом базы данных.
Любые идеи о том, как иметь несколько @TestMixin, или это проблема дизайна, когда у меня есть импорт grails.web.JSONBuilder в классе обслуживания? В противном случае мне придется использовать библиотеку JAVA/JSON или поместить материал JSON в контроллер.
Вот как я хочу, чтобы тест выглядел так:
@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 != "";
}
}
Я получаю класс @TestMixin(ControllerUnitTestMixin) @TestMixin(DomainClassUnitTestMixin) JsTreeJSONGeneratorServiceTests {
void testSomething() {
DataProfileStats stats1 = new DataProfileStats();
stats1.tableName = "table";
mockDomain(DataProfileStats, stats1);
JsTreeJSONGeneratorService service = new JsTreeJSONGeneratorService();
String json = service.buildNodeString();
assert json != "";
}
}
Я получаю класс @TestMixin(ControllerUnitTestMixin) @TestMixin(DomainClassUnitTestMixin) JsTreeJSONGeneratorServiceTests {
void testSomething() {
DataProfileStats stats1 = new DataProfileStats();
stats1.tableName = "table";
mockDomain(DataProfileStats, stats1);
JsTreeJSONGeneratorService service = new JsTreeJSONGeneratorService();
String json = service.buildNodeString();
assert json != "";
}
}
Я получаю исключение «Невозможно указать повторяющуюся аннотацию для одного и того же члена: grails.test.mixin.TestMixin».
Спасибо