【发布时间】:2025-12-19 23:00:12
【问题描述】:
所以,我在下面有这个非常简单的规范。我有一个不是控制器或服务或类似的类。这是一个工作类。它依赖于两个服务:updateService 和 directoryTypeService。它运行 Redis 异步作业,位于 /grails-app/jobs 文件夹下。
我只想确保每当我调用此 job#perform() 方法(返回类型为 void)时,调用一个名为 UpdateService#completeClaiming 的给定依赖方法,但不会调用 UpdateService#requestNewPin。 (顺便说一下,Listing 是一个领域类)。
当我运行此规范时,我不断收到一条错误消息:“此时不再需要调用 '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)
}
【问题讨论】: