【发布时间】:2015-08-19 19:45:36
【问题描述】:
我正在尝试为调用服务方法的控制器编写测试。我想在该服务中模拟一个依赖方法。
我的规格如下:
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()
}
当我尝试运行此测试时,我收到以下错误:
失败:| 我的间谍应该被称为(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可用。
【问题讨论】:
-
您正在编写单元测试或集成测试?
-
你有没有设法找到解决这个问题的方法?看来我刚刚在stackoverflow.com/questions/59030447/… 提出了类似的问题