如何在规格 运行 时打印出 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 块执行目前没有钩子或拦截点。
另请参阅这些功能请求(遗憾的是仍未得到答复):
- https://github.com/spockframework/spock/issues/538
- https://github.com/spockframework/spock/issues/645
围绕日志记录块标签,还可以编写 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
可不可以?如果可以,对调试有很大的帮助。
更新: 对于元数据,我指的是在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 块执行目前没有钩子或拦截点。
另请参阅这些功能请求(遗憾的是仍未得到答复):
- https://github.com/spockframework/spock/issues/538
- https://github.com/spockframework/spock/issues/645
围绕日志记录块标签,还可以编写 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