在Spock已经内置的情况下测试Groovy定制DSL(例如Jenkins管道)?
已经有一段时间了,我们试图找到一种使用Spock测试框架测试定制DSL(实际上是Jenkins管道代码)的方法——对共享库中的Jenkins管道类进行单元测试。 我知道那里有一个在Spock已经内置的情况下测试Groovy定制DSL(例如Jenkins管道)?,groovy,jenkins-pipeline,spock,Groovy,Jenkins Pipeline,Spock,已经有一段时间了,我们试图找到一种使用Spock测试框架测试定制DSL(实际上是Jenkins管道代码)的方法——对共享库中的Jenkins管道类进行单元测试。 我知道那里有一个JenkinsPipelineUnit项目。然而,它似乎并没有针对这个用例 为了使代码的测试尽可能简单,在我继续研究解决方案之前,我想知道Spock中是否已经内置了一些我可以使用的东西 首选解决方案 我想做的(最好的情况)如下。测试可能会失败,因为未从闭包参数中调用script.echo“bar”,而调用了foo。但是,
JenkinsPipelineUnit
项目。然而,它似乎并没有针对这个用例
为了使代码的测试尽可能简单,在我继续研究解决方案之前,我想知道Spock中是否已经内置了一些我可以使用的东西
首选解决方案
我想做的(最好的情况)如下。测试可能会失败,因为未从闭包参数中调用script.echo“bar”
,而调用了foo
。但是,它将通过(使用spock 1.3和2.0 M4进行测试):
替代方法
作为替代方案,我尝试了以下方法-但这将始终失败:
def 'nested foo context fooName/bar arguments can be checked'() {
when:
script.foo('bar') {
script.echo 'bar'
}
then:
1 * script.foo('bar', _) >> {String string, Closure closure ->
closure()
1 * script.echo('bar')
}
}
错误消息将是:
调用太少,无法:
1*script.echo('bar')(0次调用)
不匹配的调用(按相似性排序):
1*.echo('bar')
当前解决方案
我们目前正在做的是(使用一些自定义脚本):
def 'nested foo context fooName/bar arguments can be checked'() {
when:
script.foo('bar') {
script.echo 'bar'
}
then:
1 * script.foo('bar', _) >> {String string, Closure closure ->
closure()
1 * script.echo('bar')
}
}
def 'nested foo context fooName/bar arguments can be checked by assertCalledFrom'() {
when:
script.foo('bar') {
script.echo 'bar'
}
then:
1 * script.echo('bar') >> {
assertCalledFrom('foo', 'bar')
}
}