【发布时间】:2016-02-26 08:11:31
【问题描述】:
我无法解决两个 spock 集成测试之间的奇怪污染情况。我想我做错了什么,但我不明白是什么。
这两个集成测试是测试同一个控制器的不同情况。在第一个中我模拟了一个服务,而在第二个中我不模拟。
以下是两个测试的重要部分:
测试 1:
// CodeControllerSpec.groovy
...
def controller = new CodeController()
def serviceMock = new MockFor(PollutingService)
serviceMock.demand.search(1) { a, b, c ->
return [id: 1]
}
controller.myService.pollutingService = serviceMock.proxyInstance()
controller.save()
...
then:
serviceMock.verify(controller.myService.pollutingService)
测试 2:
// CodeEngineSpec.groovy
...
def controller = new CodeController()
controller.show()
...
then:
...
控制器和服务如下
// CodeController
class CodeController extends RestfulController<Code> {
def myService
def show() {
...
myService.execute()
...
}
}
// MyService
class MyService {
def pollutingService
def execute() {
...
pollutingService.search(a, b, c)
...
}
}
// PollutingService
class PollutingService {
def search(a, b, c) {
...
...
}
}
如果我一个接一个地运行这两个测试,它们都会通过,但是如果我一起运行它们,第二个会失败
No more calls to 'search' expected at this point. End of demands.
我确定使用了第一个服务中的模拟(我已经逐行调试了代码),但我不知道为什么在测试后没有清理模拟。 任何建议都非常欢迎。
我正在使用 grails 2.3.8
【问题讨论】:
标签: grails