如何在规格 运行 时打印出 spock 元数据(given|when|then 的内容)?

How to print out spock metadata(the conent of given|when|then) when specs running?

可不可以?如果可以,对调试有很大的帮助。

更新: 对于元数据,我指的是在given|when|then语句之后的内容,比如:

def "test case"...
given:"some preconditions"
when:"do something"
then:"some result"
...

我要打印打击内容:

"test case" begins
"some preconditions"
"do something"
"some result"

目前这是不可能的,因为即使你写了一个 Spock 扩展,你现在可以挂钩的最深的是功能方法执行。 IE。您可以做的是在执行方法之前或之后打印所有块标签,但在方法执行期间不要穿插您自己的日志输出。 intra-method 块执行目前没有钩子或拦截点。

另请参阅这些功能请求(遗憾的是仍未得到答复):

围绕日志记录块标签,还可以编写 HTML 测试报告作为测试文档。但这是一个报告的东西,而不是你可以在 运行 测试期间使用的东西。


更新: 同时还有一些解决方法。把这个放在你的全局 Spock 配置脚本中(通常是 src/test/resources/SpockConfig.groovy:

import spock.lang.Specification

class LabelPrinter {
  def _(def message) {
    println message
    true
  }
}

Specification.mixin LabelPrinter

然后像这样从 Spock 或 Geb 测试中使用它(请注意标签后面的下划线):

package de.scrum_master.testing

import spock.lang.Specification

class MySpockTest extends Specification {
  def "interaction"() {
    given:_ "My given comment"
    def foo = 11
    def bar = foo + 4
    println "blah"

    expect:_ "My expect comment"
    interaction {
      foo = 2
      bar = 5
      true
    }
    println "foo"
    foo * bar == 10
    foo + bar == 7

    and:_ "My and comment"
    true
  }
}

控制台日志:

My given comment
blah
My expect comment
foo
My and comment