我有一个应该在我的应用程序中的域类上运行的 Controller ,但是它并不关心它正在使用哪种类型的域类。我想编写单元测试来验证它是否可以正确响应,但是如果域类发生更改或删除,我不想将其耦合到应用程序中的域类。像这样:
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域类的依赖?
最佳答案
如果从 Controller 中删除所有对Item
的引用,则可以创建一个ItemService
(事务性的)并将其注入(inject)到 Controller 中。从那里,您可以保持ItemService
相对固定,并在 Controller 中对其进行模拟。
测试:
protected void setUp(){
controller.itemService = [retrieveItems: { arg -> return [new Item()] }] as ItemService
}
关于unit-testing - 从 Controller 单元测试中删除域类依赖性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5276618/