从控制器单元测试中删除域类依赖性

时间:2011-03-11 18:03:06

标签: unit-testing grails

我有一个控制器应该在我的应用程序中对域类进行操作,但这并不关心它正在使用哪种类型的域类。我想编写单元测试来验证它是否正确响应但我不想将它连接到我的应用程序中的域类,以防域类更改或被删除。像这样:

void testReadNoItems() {
    mockDomain(Item)

    controller.params["class"] = "DefaultGrailsDomainClass"
    controller.params.xaction = "read"
    controller.index()

    def json = JSON.parse(controller.response.contentAsString)

    assert json.metaData.root == "data"
    assert json.metaData.totalProperty == "total"
    assert json.metaData.successProperty == "success"
    assert json.metaData.idProperty == "id"
    assert json.metaData.fields[0].id == "int"
    assert json.metaData.fields[1].name == "string"
    assert json.data == []
    assert json.total == 0
}

有没有办法删除对Item域类的依赖?

1 个答案:

答案 0 :(得分:1)

如果从控制器中删除Item的所有引用,则可以创建ItemService(这是事务性的)并将其注入控制器。从那里,你可以保持ItemService相对固定并在控制器中模拟它。

<强>测试

protected void setUp(){
   controller.itemService = [retrieveItems: { arg -> return [new Item()] }] as ItemService
}