2

我怎样才能在 Spock/groovy 中做到这一点?

package org.jenkinsci.plugins

import hudson.matrix.*
import spock.lang.*
import org.junit.Rule
import org.jvnet.hudson.test.JenkinsRule

class xxxx extends Specification {

    @Rule JenkinsRule rule = new JenkinsRule()

    def 'matrix'() {
        given:
        def matrixProject = rule.createMatrixProject()
        AxisList axl = new AxisList();
        def axis = new TextAxis('TEST', "1", "2", "3")

        axl.add(axis)
        matrixProject.setAxes(axl)

        expect: matrixProject.scheduleBuild2(0).get().logFile.text.contains("Some String!")

        matrixProject.scheduleBuild2(0).get().getRuns().each(){
            expect: it.logFile.text.contains("Another String")
        }
    }
}

具体来说,如何使用嵌套测试运行闭包?“另一个字符串”测试不起作用

4

3 回答 3

1

使用every代替each,或使用嵌套的assert.

于 2013-10-17T17:00:44.523 回答
1

这行得通吗?

def 'matrix'() {
    given:
        def matrixProject = rule.createMatrixProject()
        def axis = new TextAxis('TEST', "1", "2", "3")
        matrixProject.axes.add(axis)

    expect:
        with( matrixProject.scheduleBuild2(0).get() ) {
            logFile.text.contains("Some String!")
            runs.every { it.logFile.text.contains("Another String") }
        }
    }
}
于 2013-10-17T12:27:57.650 回答
0

我不确定我是否理解你的问题。但是,如果通过嵌套测试您的意思是在每个闭包内评估语句,为什么不只使用 assert

expect:
matrixProject.scheduleBuild2(0).get().logFile.text.contains("Some String!")
matrixProject.scheduleBuild2(0).get().getRuns().each() {
    assert it.logFile.text.contains("Another String")
}

@tim_yates 的方法似乎也不错,更像是 Spock 的方法。不过我还没有测试过。

编辑

如果您想确保所有日志文件都包含测试字符串,请按照 Peter 的建议使用“每个”方法。

expect:
...
matrixProject.scheduleBuild2(0).get().getRuns().every {
    it.text.contains('Another String')
}

其他方法,如果您想知道有多少日志文件在测试失败时不包含测试字符串,请计算它们并将结果大小与零进行比较:

expect:
...
matrixProject.scheduleBuild2(0).get().getRuns().count {
    !it.text.contains('Another String')
} == 0

还有一个,如果您想知道哪些文件导致测试失败,请获取不包含测试字符串的文件的名称并将其与空列表进行比较:

expect:
...
matrixProject.scheduleBuild2(0).get().getRuns().findAll {
    !it.text.contains('Another String')
}*.name == []
于 2013-10-17T14:00:39.910 回答