Как предоставить контекст выполнения для jobExplorer.getJobExecution (идентификатор задания) при тестировании одного шага - PullRequest
0 голосов
/ 26 марта 2019

На шаге, который я тестирую, есть jobExplorer.getJobExecution (jobId).Он возвращает jobExecution, имеющий ExecutionContext как ноль. Как предоставить этот ExecutionContext при запуске шага с помощью JobLauncherTestUtils.launch (name, param, precookedContext)?

Я пытался выполнить Mocking jobExplorer с помощью @MockBean, но мне нужно сделать сс использованием Mockito.

В задании:

@Bean(name="sampleWriter")
@StepScope
public FlatFileItemWirter<String> sampleWriter(
#stepExecution.jobExecution.id long jobId){

RandomClass randomClass= RandomClass(jobExplorer.getJobExecution(jobId));
new FlatFileItemWriterBuilder<String>
.name()
.writer(randomClass)
.build();
}

Я ожидаю возврата jobExecution с ExecutionContext, но фактическое jobExecution возвращает нулевое значение.

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Модуль spring-batch-test предоставляет несколько тестовых утилит, две из которых могут быть полезны в вашем случае:

  • MetaDataInstanceFactory : Этот класс позволяет создавать задания / выполнение шаговс «заранее приготовленным» контекстом выполнения.См. Mocking Domain Objects для получения более подробной информации и примеров кода
  • ExecutionContextTestUtils : Этот класс позволяет получать значения из контекста выполнения задания / шага

Я не должен использовать mocktio Framework.

С этими классами вы можете реализовать свой тест без использования mockito.

Надеюсь, это поможет.

0 голосов
/ 26 марта 2019

Образец тестового класса с использованием MockitoJUnitRunner и @Mock

    @RunWith(MockitoJUnitRunner.class)
    public class TaskletTest {

        @Mock
        StepContribution stepContribution;

        @Mock
        ChunkContext chunkContext;

        @Mock
        StepContext stepContext;

        @Mock
        StepExecution stepExecution;

        @Mock
        JobExecution jobExecution;

        @Mock
        ExecutionContext executionContext;

        @Mock 
        JobExecution jobExecution

        @Before
        public void setup() {
            when(chunkContext.getStepContext()).thenReturn(stepContext);
            when(stepContext.getStepExecution()).thenReturn(stepExecution);
            when(stepExecution.getJobExecution()).thenReturn(jobExecution);
            when(jobExecution.getExecutionContext()).thenReturn(executionContext);
            MockitoAnnotations.init(this);
        }

        @Test
        public void yourTestCase() {
        //custom logic
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...