首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spock标签组合

Spock标签组合
EN

Stack Overflow用户
提问于 2015-10-10 00:59:35
回答 1查看 5.3K关注 0票数 13

关于如何使用其标签的示例,如:那里这么多斯波克斯波克等级库

代码语言:javascript
复制
// when -> then label combo
def "test something"() {
    when:
    // blah

    then:
    // blah blah
}

标签组合,如:

  • when -> then
  • given -> when -> then
  • expect
  • given -> expect

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

代码语言:javascript
复制
def "do something"() {
    when:
    // blah

    expect:
    // blah
}

我可以吗?我不知道。那麽:

代码语言:javascript
复制
def "do something else"() {
    when:
    // blah

    then:
    // blah

    expect:
    // blah

    where:
    // blah
}

我可以吗?再说一遍,我不知道。但我想知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-10 15:01:19

我实际上是你提到的一个教程的作者。我认为回答你的问题的最好办法是真正理解特殊标签的用途。也许这样会更明显,为什么某些组合是合理的,而另一些则不合理。请参阅原始文档primer.html。它很好地解释了所有的标签和它们的目的。此外,它还附带了以下图表:

我希望能告诉你很多。因此,例如,当和同时使用标签时,就没有多大意义了。expect标签的设计目的是在(然后是)两种情况下替换。其背后的原因在文件中得到了很好的解释:

一个期待的街区。是有用的情况下,它是更自然地描述刺激和预期的反应在一个单一的表达。

Spock本身将不允许您使用此组合。如果您试图执行以下代码。

代码语言:javascript
复制
def "test"() {
    when:
        println("test")

    expect:
        1==1
}

您将收到这样的错误消息。

启动失败: /Users/wooki/IdeaProjects/mylibrary/src/test/groovy/ExampleTest.groovy: 13:'expect‘在这里是不允许的;相反,使用一个:,然后@第13行,第9列。

令我惊讶的是,你的第二个例子奏效了。但是,我认为在这里使用expect而不是像我通常所做的那样使用和并没有多大好处。

代码语言:javascript
复制
def "do something else"() {
    when:
    // stimulus

    then:
    // 1st verification

    and:
    // 2nd verification

    where:
    // parametrization
}

让在之后使用或和的唯一原因是,当标签时,将负责验证中代码执行结果的代码分开。例如,对相互关联的验证进行分组,甚至对单独的验证进行分组,但是有可能使用可以附加到Spock中标签的字符串来对它们进行描述。

代码语言:javascript
复制
def "do something else"() {
    when:
    // stimulus

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

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

因此,既然您已经声明测试的验证部分已经开始(使用然后块),我将坚持使用和标签来分离进一步的代码。

关于的标签。它的工作有点像一个循环指示器。因此,无论您使用哪种标签组合,都可以将where标签放在标签的末尾。这个测试并不是单个测试运行的一部分,它只是强制测试运行了很多次。

也有可能出现这样的情况:

代码语言:javascript
复制
def "test"() {
    given:
        def value

    when:
        value = 1

    then:
        value == 1

    when:
        value = 2

    then:
        value == 2
}

使用上述方法,只需确保您的测试不是“测试太多”。这意味着,这可能是为什么你使用两组时间-然后成为一个完美的借口,这个测试被分为两个单独的测试。

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

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33049163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档