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
}
我同意-控制器应该调用服务,然后调用域对象。