2017-06-09 5 views
2

Ich habe einen einfachen Job mit 2 Tasklets implementiert. Ich möchte das zweite Tasklet testen, indem ich Parameter übergebe.Test einzelner Spring Batch Tasklet Schritt mit Parametern

Ich habe den Frühling Batch-Dokumentation und unter meinem Test lesen:

@RunWith(SpringRunner.class) 
@SpringBootTest 
@ActiveProfiles({"test"}) 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, 
     StepScopeTestExecutionListener.class }) 
public class EtudeBatchApplicationTests { 
    @Autowired 
    private JobLauncherTestUtils jobLauncherTestUtils; 

    public StepExecution getStepExecution() { 
     StepExecution execution = MetaDataInstanceFactory.createStepExecution(); 
     execution.getJobExecution().getExecutionContext().putString("myValue", "foo,bar,spam"); 
     return execution; 
    } 

    @Test 
    public void contextLoads() { 

     JobExecution jobExecution = jobLauncherTestUtils.launchStep("insertIncludedSiretsStep"); 
    } 

} 

Mein Problem in meinem Tasklet wird, ist die myValue immer null.

Unten der Code des Tasklet:

@Component 
@StepScope 
@Slf4j 
public class InsertIncludedSiretsTask implements Tasklet { 
    @Override 
    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { 
     Object myValue = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().get("myValue"); 

     log.info("INSERTINCLUDEDSIRETSTASK runnning"); 
     Thread.sleep(3000); 
     return RepeatStatus.FINISHED; 

    } 
} 

Antwort

3

Sie die ChunkContext nach diesem Beispiel verspotten:

http://www.javased.com/index.php?source_dir=spring-insight-plugins/collection-plugins/spring-batch/src/test/java/com/springsource/insight/plugin/springbatch/TaskletCollectionAspectTest.java

Hier ist mein Code:

public ChunkContext createChunkContext() { 
    StepExecution stepExecution=Mockito.mock(StepExecution.class); 
    StepContext stepContext=Mockito.mock(StepContext.class); 
    ChunkContext chunkContext=Mockito.mock(ChunkContext.class); 
    JobExecution jobExecution= createJobExecution(); 

    Mockito.when(chunkContext.getStepContext()).thenReturn(stepContext); 
    Mockito.when(stepContext.getStepExecution()).thenReturn(stepExecution); 
    Mockito.when(stepExecution.getJobExecution()).thenReturn(jobExecution); 

    return chunkContext; 
} 
public JobExecution createJobExecution() { 
    JobExecution execution = MetaDataInstanceFactory.createJobExecution(); 
    execution.getExecutionContext().putString("myValue", "foo,bar,spam"); 
    return execution; 
} 

@Test 
public void testSendEmail() throws Exception { 
    StepContribution contribution= Mockito.mock(StepContribution.class); 
    ChunkContext chunkContext= createChunkContext(); 


    sendReportTasklet.execute(contribution, chunkContext); 
    } 
Verwandte Themen