我试图测试一个包含在一个Job中的一个步骤。这是基本的工作配置:
Flow readFlow = new FlowBuilder<Flow>("readFlow").start(step01.deleteProcessedRecords()).on("*")
.to(step02.retrieveIdentifiers())...end();
Flow firstWriteFlow = new FlowBuilder<Flow>("firstWriteFlow").from(step04.createFirstFile()).end();
FlowJobBuilder builder = new JobBuilder("createFiles").repository(jobRepository)
.incrementer(new RunIdIncrementer())
.start(readFlow)
.on("*")
.to(firstWriteFlow)
.end();
我会使流程更复杂,为简单起见,它们已被简化。当我执行以下测试时,我收到一个错误:
JobParameters jobParameters = new JobParametersBuilder()
.addString("runId", "Step01").toJobParameters();
JobExecution exec = jobLauncherTestUtils
.launchStep("deleteProcessedRecords", jobParameters);
错误:
java.lang.IllegalStateException: No Step found with name: [deleteProcessedRecords]
但是,如果我测试作业,那么步骤显然就在那里:
JobParameters jobParameters = new JobParametersBuilder()
.addString("runId", "Step01").toJobParameters();
JobExecution exec = jobLauncherTestUtils
.launchJob(jobParameters);
成功:
2016-05-09 17:34:47.387 INFO 16748 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [FlowJob: [name=createFiles]] launched with the following parameters: [{runId=Step01}]
2016-05-09 17:34:47.450 INFO 16748 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [deleteProcessedRecords]
2016-05-09 17:34:47.699 INFO 16748 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [retrieveIdentifiers]
我已经检查了文档for Unit Testing,这似乎表明我应该能够传递步骤名称。任何人都可以告诉我如何正确测试一个步骤或我是否做错了什么?提前谢谢,
塞尔吉奥。
编辑:
根据要求,这是一步:
@Autowired
private DeleteProcessedRecordsTasklet deleteProcessedRecordsTasklet;
@Bean
public Step deleteProcessedRecords() {
return stepBuilderFactory.get("deleteProcessedRecords")
.tasklet(deleteProcessedRecordsTasklet)
.build();
}
我正在使用spring-batch-core版本3.0.7.RELEASE,spring-boot-starter-batch 1.3.5.RELEASE
的一部分答案 0 :(得分:0)
对不起,我会发表评论而不是回答,但我没有足够的声誉。但是,根据您的Spring批量版本,您可能会受到此bug的影响。
答案 1 :(得分:0)
我今天和你有同样的问题,我希望这可以帮助你。
我的问题是,当我尝试启动该步骤时,流程未初始化,因此无法找到该步骤:
java.lang.IllegalStateException:找不到名称的步骤:[firstStep]
要解决我的问题,我只需用@Bean注释标记返回我的Flow的函数,这样在我尝试使用JobLauncherTestUtils启动步骤之前初始化Flow。
@Bean //***this solved my problem***
public Flow initialFlow() {
return new FlowBuilder<Flow>("initialFlow")
.start(firstStep)
.next(secondStep)
.end();
}
现在我可以像这样运行步骤:
jobLauncherTestUtils.setJob(exampleJob);
JobExecution jobExecution = jobLauncherTestUtils.launchStep("firstStep");
我通过在函数findSteps
内的this file上放置一个断点来解决这个问题。我意识到该步骤未被添加到getStep
方法(由launchStep
JobLauncherTestUtils
使用)的步骤地图中。
我的问题与bug 2291无关,我怀疑你的问题也不是。如果您使用的是3.0.7.RELEASE,那么您已经拥有了修复程序的代码。