gpt4 book ai didi

grails - 仅在集成测试中需要模拟一种服务方法

转载 作者:行者123 更新时间:2023-12-02 14:58:30 24 4
gpt4 key购买 nike

我正在编写grails集成测试,这些测试调出到调用服务的 Controller ,该服务调用另一个服务,另一个服务调用另一个服务。

Controller -> ServiceA.method1()  -> ServiceB.method2() -> ServiceC.method3()

最后一个要调用的服务中的最后一个方法( ServiceC.method3())调用外界(另一个JVM)并返回结果,我想对其进行模拟以进行集成测试。因此,我仍在测试该特定服务方法前后的链。

我正在阅读grails中的模拟,但似乎只有在单元测试中才有可能。

有什么技巧如何推进这一步吗?

最佳答案

使用metaClass重写方法的功能。我一直在进行集成测试时以此为模拟方式。

因此,在测试方法中,请执行以下操作(请注意,方法arg类型必须与实际方法完全匹配):

controller.serviceA.serviceB.serviceC.metaClass.method3 = { Args args ->
// do whatever you want here, set flags to indicate method called,
// assert args, declare return types, etc
// return 'mocked' result
}

确保在集成测试拆卸方法中重置了该服务的metaClass,否则所有其他int测试将具有相同的定义:
controller.serviceA.serviceB.serviceC.metaClass = null

关于grails - 仅在集成测试中需要模拟一种服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21610099/

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