我的规格出了什么问题?

时间:2015-02-13 16:59:13

标签: grails spock

所以,我在下面有这个非常简单的规范。我有一个不是控制器或服务或类似的类。这是一个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)
}

1 个答案:

答案 0 :(得分:1)

你好像混淆了Groovy和Spock的嘲笑。您不能对使用0 * updateServiceMock.requestNewPin(_ as Listing, true)创建的Groovy模拟使用Spock模拟语法(例如mockFor())。使用Mock()Stub()Spy()创建Spock模拟。我不知道在Spock规范中使用Groovy模拟的任何正当理由。