Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 从控制器单元测试中删除域类依赖项_Unit Testing_Grails - Fatal编程技术网

Unit testing 从控制器单元测试中删除域类依赖项

Unit testing 从控制器单元测试中删除域类依赖项,unit-testing,grails,Unit Testing,Grails,我有一个控制器,它应该在我的应用程序中对域类进行操作,但它不关心它使用的域类的类型。我想编写单元测试来验证它是否正确响应,但我不想在域类更改或被删除的情况下将其与应用程序中的域类耦合。大概是这样的: void testReadNoItems() { mockDomain(Item) controller.params["class"] = "DefaultGrailsDomainClass" controller.params.xaction = "read"

我有一个控制器,它应该在我的应用程序中对域类进行操作,但它不关心它使用的域类的类型。我想编写单元测试来验证它是否正确响应,但我不想在域类更改或被删除的情况下将其与应用程序中的域类耦合。大概是这样的:

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
的所有引用,则可以创建一个
ItemService
(它是事务性的)并将其注入控制器。从那里,您可以保持
ItemService
相对固定,并在控制器中模拟它

测试:

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

我同意-控制器应该调用服务,然后调用域对象。