Spock缺少方法异常。

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: 找不到可适用于 Something、Record values: [given values] 的 doFlow() 方法签名。

3
据推测,这将紧接着是《寻找斯波克失踪的方式》。 :-) - T.J. Crowder
1个回答

6
"我的流程"和"doFlow"都是功能方法,因为它们具有像“given”、“when”和“then”这样的代码块。Spock负责调用功能方法,一个功能方法不能调用另一个功能方法。如果"doFlow"是一个辅助方法,则应使用显式的"assert"语句,并且不应该有任何代码块。
PS:功能方法不能声明方法参数,除非它们是数据驱动的(即具有"where"块)。
PPS:功能方法不能只有一个"given"/"and"块。(这将导致编译错误。)"

难道没有任何注释表明这只是一个简单的方法而不是特征方法吗? - Random42
1
一个简单的方法是没有块及其相关功能的方法。你所要求的特性之所以不被支持,是因为不清楚从另一个方法的 when 块中调用带有 expect 块的方法会意味着什么。突然间,when 块将不再实现它的目的,即(仅)测试代码下的运行情况。 - Peter Niederwieser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接