Grails/Groovy - 使用多个@TestMixin

Sco*_*ott 9 grails unit-testing mixins

在Grails中,我有一项服务,我想进行单元测试.该服务使用这些导入:

import grails.converters.JSON
import grails.web.JSONBuilder
Run Code Online (Sandbox Code Playgroud)

我希望服务获取数据并将其转换为JSON:

def tables = DataProfileStats.withCriteria {
        projections {
            distinct("tableName")               
            }
        };
Run Code Online (Sandbox Code Playgroud)

我编写的用于构建JSON的辅助方法是:

public String buildNodeString(String nodeText)
{
    def builder = new JSONBuilder();

    JSON result = builder.build {
        hello = "world"
        };

    return result.toString();
}
Run Code Online (Sandbox Code Playgroud)

在单元测试中,我必须添加@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 != "";

}
Run Code Online (Sandbox Code Playgroud)

}

我得到了@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 != "";

}
Run Code Online (Sandbox Code Playgroud)

}

我得到了@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 != "";

}
Run Code Online (Sandbox Code Playgroud)

}

我得到一个"不能在同一个成员上指定重复注释:grails.test.mixin.TestMixin"异常.

谢谢

Sco*_*ott 20

找到了!

@TestMixin([GrailsUnitTestMixin, ControllerUnitTestMixin, DomainClassUnitTestMixin])
Run Code Online (Sandbox Code Playgroud)