我有一个应该在我的应用程序中的域类上运行的 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/

10-12 14:03