我有一个控制器应该在我的应用程序中对域类进行操作,但这并不关心它正在使用哪种类型的域类。我想编写单元测试来验证它是否正确响应但我不想将它连接到我的应用程序中的域类,以防域类更改或被删除。像这样:
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域类的依赖?
答案 0 :(得分:1)
如果从控制器中删除Item
的所有引用,则可以创建ItemService
(这是事务性的)并将其注入控制器。从那里,你可以保持ItemService
相对固定并在控制器中模拟它。
<强>测试强>
protected void setUp(){
controller.itemService = [retrieveItems: { arg -> return [new Item()] }] as ItemService
}