测试单个步骤时如何为jobExplorer.getJobExecution(作业ID)提供执行上下文

时间:2019-03-26 08:57:44

标签: java spring spring-batch

在我测试的步骤中具有jobExplorer.getJobExecution(jobId)。它返回的ExecutionContext为null的jobExecution。使用JobLauncherTestUtils.launch(name,param,precookedContext)启动步骤时如何提供此ExecutionContext?

我曾尝试使用@MockBean模拟jobExplorer,但我需要使用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();
}

我希望返回带有ExecutionContext的jobExecution,但实际的jobExecution返回null值。

2 个答案:

答案 0 :(得分:0)

使用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
        }

    }

答案 1 :(得分:0)

spring-batch-test模块提供了几种测试实用程序,其中两种可能对您有用:

  

我不应该使用模拟框架。

使用这些类,您可以在不使用模拟的情况下实现测试。

希望这会有所帮助。