目前,我正在尝试注册findFiles步骤。
我的设置如下:

src/
    test/
        groovy/
            TestJavaLib.groovy
vars/
    javaLib.groovy
javaApp.jenkinsfile

在TestJavaApp.groovy内部,我有:
...
import com.lesfurets.jenkins.unit.RegressionTest
import com.lesfurets.jenkins.unit.BasePipelineTest

class TestJavaLibraryPipeline extends BasePipelineTest implements RegressionTest {
    // Some overridden setUp() which loads shared libs
    // and registers methods referenced in javaLib.groovy

    void registerPipelineMethods() {
        ...
        def fileList = [new File("testFile1"), new File("testFile2")]
        helper.registerAllowedMethod('findFiles', { f -> return fileList })
        ...
    }
}

而我的javaLib.groovy包含此当前失败的部分:
    ...
    def pomFiles = findFiles glob: "target/publish/**/${JOB_BASE_NAME}*.pom"
    if (pomFiles.length < 1) { // Fails with java.lang.NullPointerException: Cannot get property 'length' on null object
        error("no pom file found")
    }
    ...

我尝试了多个闭包来返回各种对象,但是每次我得到NPE时。
问题是-如何正确注册“findFiles”方法?

N.B.我对groovy中的 mock 和闭包非常陌生。

最佳答案

我也面临同样的问题。但是,我可以使用以下方法签名来模拟findFiles()方法:

helper.registerAllowedMethod(method('findFiles', Map.class), {map ->
            return [['path':'testPath/test.zip']]
        })

关于jenkins - 在JenkinsPipelineUnit中模拟findFiles,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48772029/

10-14 01:16