Spock给出,然后,何时,交互检查不起作用

时间:2017-07-21 15:16:01

标签: bdd spock

我有以下spock测试

def "setXandSave saves the parcel with the chosen xValue"() {
    given:
    jpaRepository.findOne(parcelId) >> parcel

    when:
    repository.setXandSave(parcelId, xValue)

    then:
    1 * parcel.setX(xValue)
    1 * jpaRepository.save(parcel)

    where:
    parcelId | parcel                   | xValue
    10L      | Mock(ParcelEntity.class) | "a"
    20L      | Mock(ParcelEntity.class) | "B"
}

我在第1 * parcel.setX(xValue)行收到错误“调用:......的次数太少。”

我做错了什么或者这是Spock的限制?我在运行测试时调试了setXandSave方法,确实调用了setX。 但斯波克说。

Unmatched invocations (ordered by similarity):

None

有关如何调试问题的任何帮助也表示赞赏。

1 个答案:

答案 0 :(得分:1)

在您的案例中,我没有理由让where阻止此处。第二列有重复,可以从表中提取。同样从测试的角度来看,输入10 /' a'和' 20' B'对。因此,我们可以将您的测试简化为:

def "setXandSave saves the parcel with the chosen xValue"() {
    given:
    def parcelId = 10L
    def xValue = 'a'

    and:
    def parcel = Mock(ParcelEntity)
    jpaRepository.findOne(parcelId) >> parcel

    when:
    repository.setXandSave(parcelId, xValue)

    then:
    1 * parcel.setX(xValue)
    1 * jpaRepository.save(parcel)
}