2017-07-28 133 views
0

我是Spring Batch的新手,我开始开发一个简单的批处理应用程序。现在我正在考虑一些单元测试未知的JUnit,这可能是我的应用程序和代码健康)使用JUnit进行单元测试,无需XML配置的Spring批处理

问题是,我找不到任何资源(例子,tutos ...)在互联网上,显示如何在不使用XML的情况下使用Spring Batch执行单元测试。

这里是我的代码更清晰:

配置类:

package my.company.project.name.batch.config 
@Configuration 
@EnableBatchProcessing 
@ComponentScan({ 
     "my.company.project.name.batch.reader", 
     "my.company.project.name.batch.tasklet", 
     "my.company.project.name.batch.processor", 
     "my.company.project.name.batch.writer" 
}) 
@Import({CommonConfig.class}) 
public class MyItemBatchConfig { 
    @Autowired 
    private StepBuilderFactory steps; 

    @Autowired 
    private JobBuilderFactory jobBuilderFactory; 

    @Autowired 
    private MyItemTasklet myItemTasklet; 

    @Bean 
    public Job myItemJob(@Qualifier("myItem") Step loadProducts){ 
     return jobBuilderFactory.get("myItemJob").start(myMethod).build(); 
    } 

    @Bean(name= "myItem") 
    public Step myMethod(){ 
     return steps.get("myItem").tasklet(myItemTasklet).build(); 
    } 
} 

MyItemReader类:

package my.company.project.name.batch.reader 
@Component 
public class MyItemReader implements ItemReader<MyItem>{ 

    @Value("${batch.load.produit.csv.file.path}") 
    private String csvFilePath; 

    private LinkedList<CsvRawLine> myItems; 

    @PostConstruct 
    public void init() { 
     myItems = new LinkedList<>(CsvUtil.getCsvReader(MyItem.class, csvFilePath)); 
    } 

    @Override 
    public MyItem read() throws Exception{ 
     return myItems.poll(); 
    } 
} 

ItemProcessor中类:

package my.company.project.name.batch.processor 
@Component 
public class MyItemProcessor implements ItemProcessor<MyItem, MyItemProcessorResult> { 

    public MyItemProcessorResult process(MyItemitem) throws Exception { 
    //processing business logic 
    } 
} 

ItemWriter类:

package my.company.project.name.batch.writer 
@Component 
public class MyItemWriter implements ItemWriter<MyItem> { 

    @Override 
    public void write(List<? extends MyItem> myItems) throws Exception { 
     //writer business logic 
    } 
} 

MyItemTasklet类,将调用,从而实现由一批通缉任务的所有以前的类:

package package my.company.project.name.batch.tasklet 
@Component 
public class MyItemBatchTasklet implements Tasklet{ 

    @Autowired 
    public MyItemReader myItemReader; 

    @Autowired 
    public MyItemProcessor myItemProcessor; 

    @Autowired 
    public MyItemeWriter myItemWriter; 

    @Override 
    public RepeatStatus execute execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { 
     //calling myItemReader, myItemProcessor and myItemWriter to do the business logic 
     return RepeatStatus.FINISHED 
    } 

} 

MyItemTasklet类,将它的主要方法启动任务蕾:

package package my.company.project.name.batch 
public class MyItemTaskletLauncher{ 
    public MyItemTaskletLauncher(){ 
     //No implementation 
    } 

    public static void main (String[] args) throws IOException, JobExecutionException, NamingException { 
     Launcher.launchWithConfig("Launching MyItemTasklet ...", MyItemBatchConfig.class,false); 
    } 
} 
+0

您是否了解**如何在使用XML **时使用Spring Batch执行单元测试? –

+0

其实不,我不知道。 –

回答

-1

我用Spring Batch和MyBatis和JUnit做了一个简单的批处理应用程序。

应用程序的测试代码运行没有XML的单元测试。

这是Job的测试类。


@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = {xxx.class, yyy.class, zzz.class, xxxJobLauncherTestUtils.class}) 
public class JobTest { 

    @Autowired 
    @Qualifier(value = "xxxJobLauncherTestUtils") 
    private JobLauncherTestUtils xxxJobLauncherTestUtils; 

    @Test 
    public void testXxxJob() throws Exception { 
     JobExecution jobExecution = xxxJobLauncherTestUtils.launchJob(); 
     assertThat(jobExecution.getStatus(), is(BatchStatus.COMPLETED)); 
    } 
} 

@Component(value = "xxxJobLauncherTestUtils") 
class XxxjobLauncherTestUtils extends JobLauncherTestUtils { 

    @Autowired 
    @Qualifier(value = "xxxJob") 
    @Override 
    public void setJob(Job job) { 
     super.setJob(job); 
    } 
} 

关于详情,请参阅下面的链接。

https://github.com/Maeno/spring-batch-example/tree/master/src/test

我希望这将是有益的。

+1

提供解决方案或示例代码的链接没有问题,但如果您在链接之外提供了有关OP的问题的更多详细信息,那将会很好。 – Nima

相关问题