Spock标签组合

时间:2015-10-10 00:59:35

标签: groovy spock

There | are | so many | Spock | spec如何使用其标签的示例,例如:

Control

此类标签组合如下:

  • // when -> then label combo def "test something"() { when: // blah then: // blah blah } - > when
  • then - > given - > when
  • then
  • expect - > given

但我无处可以找到有关这些标签的合法 /有意义组合的文档。例如,我可以:

expect
我可以吗?我不知道。怎么样:

def "do something"() {
    when:
    // blah

    expect:
    // blah
}
我可以吗?再说一次,我不知道。但我想知道。

1 个答案:

答案 0 :(得分:14)

我实际上是您提到的其中一个教程的作者。我认为最好回答你的问题是真正了解特定标签的用途。也许那时为什么某些组合有意义而其他组合没有意义会更明显。请参阅原始文档http://spockframework.github.io/spock/docs/1.0/spock_primer.html。它很好地解释了所有标签及其用途。它还附带了这个图表:

Spock labels

我希望它应该已经告诉了你很多。因此,例如同时 期望标签时没有多大意义。 期望标签旨在替换然后。其背后的原因在文档中得到了很好的解释:

  

对于在单个表达式中描述刺激和预期响应更自然的情况,期望块[...]非常有用。

Spock本身不允许你使用这种组合。如果您尝试执行以下代码。

def "test"() {
    when:
        println("test")

    expect:
        1==1
}

您将收到类似的错误消息。

  

启动失败:   /Users/wooki/IdeaProjects/mylibrary/src/test/groovy/ExampleTest.groovy:   13:'期待'这里不允许;相反,使用以下之一:[和,然后] @   第13行,第9栏。

令我惊讶的是,你的第二个例子有效。但是我认为在这里使用 expect 而不是像我通常那样使用并没有多少收获。

def "do something else"() {
    when:
    // stimulus

    then:
    // 1st verification

    and:
    // 2nd verification

    where:
    // parametrization
}

然后之后期望的唯一原因是分离负责验证执行内部代码的结果的代码何时标签。例如,对以某种方式相互关联的验证进行分组,甚至将单个验证分开,但有可能使用可附加到Spock中的标签的字符串为其提供描述。

def "do something else"() {
    when:
    // stimulus

    then: "1 is always 1"
       1 == 1

    and: "2 is always 2"
       2 == 2
}

因此,由于您已经开始声明测试的验证部分开始(使用然后块),我会坚持使用标签来分隔更多代码。

关于 where 标签。它有点像循环指示器。因此,无论您使用哪种标签组合,都可以始终将 where 标签放在最后。这个实际上不是单个测试运行的一部分,它只是强制执行测试多次。

同样可以有这样的东西:

def "test"() {
    given:
        def value

    when:
        value = 1

    then:
        value == 1

    when:
        value = 2

    then:
        value == 2
}

使用上述内容,只需确保您的测试不是“测试太多”"。意思是这可能是你使用两组时间的原因 - 然后为这个测试做一个完美的借口,实际上分成两个单独的测试。

我希望至少回答你的一些问题。