Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Spock已经内置的情况下测试Groovy定制DSL(例如Jenkins管道)?_Groovy_Jenkins Pipeline_Spock - Fatal编程技术网

在Spock已经内置的情况下测试Groovy定制DSL(例如Jenkins管道)?

在Spock已经内置的情况下测试Groovy定制DSL(例如Jenkins管道)?,groovy,jenkins-pipeline,spock,Groovy,Jenkins Pipeline,Spock,已经有一段时间了,我们试图找到一种使用Spock测试框架测试定制DSL(实际上是Jenkins管道代码)的方法——对共享库中的Jenkins管道类进行单元测试。 我知道那里有一个JenkinsPipelineUnit项目。然而,它似乎并没有针对这个用例 为了使代码的测试尽可能简单,在我继续研究解决方案之前,我想知道Spock中是否已经内置了一些我可以使用的东西 首选解决方案 我想做的(最好的情况)如下。测试可能会失败,因为未从闭包参数中调用script.echo“bar”,而调用了foo。但是,

已经有一段时间了,我们试图找到一种使用Spock测试框架测试定制DSL(实际上是Jenkins管道代码)的方法——对共享库中的Jenkins管道类进行单元测试。 我知道那里有一个
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')
        }
    }