所以,我在下面有这个非常简单的规范。我有一个不是控制器或服务或类似的类。这是一个Job课程。它取决于两个服务:updateService和directoryTypeService。它运行Redis异步作业,它位于/ grails-app / jobs文件夹下。
我想要的是确保每当我调用这个job#perform()方法(返回类型为void)时,都会调用一个名为UpdateService#completeClaiming的给定依赖方法,但不会调用UpdateService#requestNewPin。 (顺便说一下,列表是一个域类。)
当我运行此规范时,我不断收到一条错误消息:"不再调用' completeClaiming'预计在这一点上。要求结束。"
我在这里做错了什么?有任何猜测吗?
@Mock(Listing)
class SubmissionJobSpec extends Specification {
def directoryTypeServiceMock
def updateServiceMock
def job
def setup(){
job = new SubmissionJob()
directoryTypeServiceMock = mockFor(DirectoryTypeService)
updateServiceMock = mockFor(UpdateService)
job.updateService = updateServiceMock.createMock()
job.directoryTypeService = directoryTypeServiceMock.createMock()
}
def "if the directory is enabled and the pin status is ENTERED, we should call updateService.completeClaiming"() {
given:
directoryTypeServiceMock.demand.isUpdateEnabled { DirectoryType d, Country c -> return true}
new Listing(
location: new Location(country: Country.DE)
).save(failOnError: true, validate: false)
when:
job.perform(Listing.last().id, true)
then:
1 * updateServiceMock.completeClaiming(Listing.last(), true) >> new ListingEvent(output: [success: true])
0 * updateServiceMock.requestNewPin(_ as Listing, true)
}
答案 0 :(得分:1)
你好像混淆了Groovy和Spock的嘲笑。您不能对使用0 * updateServiceMock.requestNewPin(_ as Listing, true)
创建的Groovy模拟使用Spock模拟语法(例如mockFor()
)。使用Mock()
,Stub()
或Spy()
创建Spock模拟。我不知道在Spock规范中使用Groovy模拟的任何正当理由。