【发布时间】:2011-12-15 18:07:42
【问题描述】:
在 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”异常。
谢谢
【问题讨论】:
标签: unit-testing grails mixins