3

我有一些看起来像类似规范的东西:

def "my spec"(Record record) {
    given: 
        Something something = getSomething()
    and: 
        otherThing = getOtherThing()

    doFlow(something, record)
    if (record.someType = Types.SOME_SPECIFIC_TYPE) {
        doFlow(something, record)
    } 
}

def doFlow(Something something, Record record) {
    when:
         //code
    then:
         //asserts

    when:
         //code
    and: 
         //mode code
    then:
         //code
}

但是,在运行时,我得到:groovy.lang.MissingMethodException: No signature of method doFlow() is applicable for arguments Something, Record values: [given values].

4

1 回答 1

6

“我的流程”和“doFlow”都是特征方法,因为它们具有诸如givenwhenthen. 调用特性方法是 Spock 的职责,一个特性方法不能调用另一个。如果doFlow是一个辅助方法,它应该使用显式assert语句,并且不应该有任何块。

PS:特征方法不能声明方法参数,除非它们是数据驱动的(即有where块)。

PPS:特征方法不能只有given/and块。(你会得到一个编译错误。)

于 2013-11-12T15:07:08.330 回答