Есть ли способ переопределить закрытие в тесте Спока?

avatar
red888
1 июля 2021 в 16:24
58
0
1

Хотя это относится к коду Jenkins, я думаю, что в более общем плане этот вопрос касается особенностей метапрограммирования Groovy.

Вот как выглядят мои тесты:

// MyDeclarativePipelineTest.groovy
class MyDeclarativePipelineTest extends DeclarativePipelineTest {
  @Override
  @Before
  public void setUp() throws Exception {
    super.setUp();
    helper.registerAllowedMethod("parameters", [ArrayList.class], null)
  }
}

// someTests.groovy
class someTests extends MyDeclarativePipelineTest {
  @Override
  @Before
  public void setUp() throws Exception {
    super.setUp();
  }

  @Test
  public void pipeline_should_execute_without_errors() throws Exception {
    addParam('MYPARAM', 'sdfsdfsdf')

    def script = loadScript("Jenkinsfile")
    script.run()
    assertJobStatusSuccess()
  }
}

// Jenkinsfile
pipeline {
    stages {
        stage('Build') {
            steps {
                If(true) {print("sdfsdfsd")} // should fail because not wrapped in script{} step
                echo 'Building..'
            }
        }
    }
}

Я использую эту библиотеку в своих тестах Spock: JenkinsPipelineUnit

Я хочу переопределить замыкание steps{} в моем классе MyDeclarativePipelineTest

Закрытие шагов определено в этом классе StageDeclaration.groovy

StageDeclaration используется в классе GenericPipelineDeclaration следующим образом:

def stage(String name,
          @DelegatesTo(strategy = DELEGATE_FIRST, value = StageDeclaration) Closure closure) {
    this.stages.put(name, createComponent(StageDeclaration, closure).with { it.name = name; it })
}

И затем, наконец, GenericPipelineDeclaration используется в DeclarativePipelineTest следующим образом:

def pipelineInterceptor = { Closure closure ->
    GenericPipelineDeclaration.binding = binding
    GenericPipelineDeclaration.createComponent(DeclarativePipeline, closure).execute(delegate)
}

Я расширяю DeclarativePipelineTest своим собственным классом MyDeclarativePipelineTest

Можно ли переопределить закрытие шагов внутри MyDeclarativePipelineTest? Я хочу, чтобы он выдавал ошибку, если необработанный код Groovy определен в замыкании steps{}, которое не заключено в замыкание script{}.

Источник
halfer
4 июля 2021 в 10:07
0

Быстрое напоминание rd888 о том, что ваша орфография нуждается в исправлении почти в каждом сообщении. Могу я побеспокоить вас, чтобы вы начали использовать проверку орфографии?

Matthias
8 июля 2021 в 15:08
0

не уверен, что это будет полезно для вас: ideone.com/9Jgbis Я действительно не могу понять, почему @Override здесь не решение.

Ответы (0)