Насмешливый поиск файлов в JenkinsPipelineUnit

В настоящее время я пытаюсь зарегистрировать шаг 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"?

NB, что я очень плохо знаком с насмешками и замыканиями в заводной.

3 ответа

Решение

Так что я нашел способ, как издеваться findFiles когда мне нужно свойство длины:

helper.registerAllowedMethod('findFiles', [Map.class], { [length: findFilesLength ?: 1] })

Это также позволяет изменить findFilesLength переменная в тестах для проверки различных условий в конвейере, как в моем OP.

Я также столкнулся с той же проблемой. Однако я смог смоделировать метод findFiles(), используя следующую сигнатуру метода:

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

Глядя на исходный код и примеры на GitHub, я вижу несколько перегрузок метода ( здесь):

  1. void registerAllowedMethod(String name, List<Class> args = [], Closure closure)
  2. void registerAllowedMethod(MethodSignature methodSignature, Closure closure)
  3. void registerAllowedMethod(MethodSignature methodSignature, Function callback)
  4. void registerAllowedMethod(MethodSignature methodSignature, Consumer callback)

Не похоже, что вы регистрируете правильную подпись с вашим звонком. Я на самом деле удивлен, что вы не получаете MissingMethodException с вашим текущим звонком.

Вам необходимо добавить остальную часть подписи метода при регистрации. findFiles метод принимает Map параметров (glob: "target/publish/**/${JOB_BASE_NAME}*.pom" является литералом карты в Groovy). Один из способов регистрации этого типа будет выглядеть так:

helper.registerAllowedMethod('findFiles', [Map.class], { f -> return fileList })
Другие вопросы по тегам