【问题标题】:Spock interaction does not work if defined with 'as'如果使用“as”定义,Spock 交互不起作用
【发布时间】:2017-03-29 06:40:04
【问题描述】:

我编写了以下规范:

class Spec extends Specification {

    def 'does not work if interaction declared as Set without parens'() {
        given:
        def holder = Mock(Holder)
        def expected = [1, 2, 3, 3]

        when:
        def output = holder.value()

        then:
        output == [1, 2, 3] as Set
//        1 * holder.value() >> expected.toSet()      // 1
        1 * holder.value() >> expected as Set       // 2
//        1 * holder.value() >> (expected as Set)     // 3
    }

    class Holder {
        def value() {
        }
    }
}

问题在于它只有在holder.value() 交互被定义为13 行时才有效。当它在 2 行中定义时,它会失败并出现以下错误:

Condition not satisfied:

output == [1, 2, 3] as Set
|      |
null   false

为什么?看起来可能有一些解析器错误。

【问题讨论】:

    标签: groovy spock


    【解决方案1】:

    没有解析器错误,但您犯了编程错误。根据Groovy operator precedence的规则,>>的优先级高于as,有效的让你的错误代码相当于

    ((1 * holder.value()) >> expected) as Set
    

    Spock 实现了一个用于测试的 DSL,但代码仍然是 Groovy。 ;-)

    【讨论】:

    • 太棒了!这就是我要找的!我知道它仍然很时髦;)
    猜你喜欢
    • 2014-07-15
    • 1970-01-01
    • 2011-02-17
    • 2012-07-10
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多