gpt4 book ai didi

grails - 如何在 Grails 集成测试中部分模拟服务

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

我正在尝试为调用服务方法的 Controller 编写测试。我想在该服务中模拟一个依赖方法。

我的规范如下:

MyController myController = new MyController()
def mockMyService

def "My spy should be called"() {
when:
mockMyService = Spy(MyService) {
methodToSpy() >> {
println "methodToSpy called"
} // stub out content of this fn
}
myController.myService = mockMyService
myController.callService()

then:
1 * mockMyService.methodToSpy()
}

当我尝试运行此测试时,我收到以下错误:

失败:|
我的 spy 应该被称为(spybug.MyControllerSpec)
|
调用太少:
1 * mockMyService.methodToSpy()(0 次调用)
不匹配的调用(按相似度排序):
1 * mockMyService.serviceMethod()
1 * mockMyService.invokeMethod('methodToSpy', [])
1 * mockMyService.invokeMethod('println', ['in serviceMethod about to call methodToSpy'])
1 * mockMyService.invokeMethod('println', ['Back from methodToSpy'])

如您所见,Spock 正在捕获 Groovy 的 invokeMethod 调用,而不是对实际方法的后续调用。为什么会这样?

完整的项目可用 here .

最佳答案

试试这个:

def "My spy should be called"() {
given:
mockMyService = Mock(MyService)
myController.myService = mockMyService

when:
myController.callService()

then:
1 * mockMyService.methodToSpy(_) >> { println "methodToSpy called" }
}

根据 stub 的 spock 文档,如果要使用基数,则必须使用 Mock 而不是 Stub。

http://spockframework.github.io/spock/docs/1.0/interaction_based_testing.html#_stubbing

关于grails - 如何在 Grails 集成测试中部分模拟服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104348/

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