Насмешливый поиск файлов в 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, я вижу несколько перегрузок метода ( здесь):
void registerAllowedMethod(String name, List<Class> args = [], Closure closure)
void registerAllowedMethod(MethodSignature methodSignature, Closure closure)
void registerAllowedMethod(MethodSignature methodSignature, Function callback)
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 })