gpt4 book ai didi

unit-testing - 模拟 Grails 单元测试的方法

转载 作者:行者123 更新时间:2023-12-02 15:38:11 25 4
gpt4 key购买 nike

在我的一个单元测试中,我在执行模拟方法时遇到了一些困难。我有以下测试代码:

void testExample() {
def mockICFService = new MockFor(ICFService)
...

//Mock the methods
controller.metaClass.icfList = { def person ->
println "icfList"
return [new IC(conceptId:'12345')]
}
mockICFService.demand.getAllIC(1..1) { def id, def withHist, def appId ->
println "mocking service"
return new Person()
}
...

def model = controller.detail()
}

在我的 Controller 类的详细信息中,我通过 ICFService 的 getAllIC() 创建了一个 Person。这部分工作正常。然而,在函数的后面,有一个对 icfList 的调用(在 Controller 中定义)。通过 println,我确定调用仍在进行中,尽管它返回一个空数组。我相信这是因为数组是根据 servletContext 中的数据填充的,但在单元测试中无法访问它(因此我试图模拟它)。

有谁知道如何强制测试使用 controller.icfList 的模拟版本而不是调用 Controller 中的实际方法?

最佳答案

当我尝试您的代码时,让我感到震惊的是模拟服务,而正常工作的部分是模拟出来的 icfList() 方法。有趣的是,与您的观察相反。对于它的值(value),这就是我所做的:

首先用 mockFor() 方法替换新的 MockFor() 类实例化。然后您需要将模拟服务注入(inject) Controller 。

def mockICFService = mockFor(ICFService)
controller.iCFService = mockICFService.createMock()

通过执行上述操作,只有 icfList() 和 getAllIC() 的模拟版本被调用,因此您根本没有使用 servletContext。查看 Grails testing documentation了解更多信息。

关于unit-testing - 模拟 Grails 单元测试的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6766808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com