java - 如果作业正在使用 simpleAsyncTaskExecutor 运行,如何在 Spring Batch 中编写测试用例
问题描述
我有使用 SimpleAsyncTaskExecutor 运行的春季批处理作业。我必须为 Job 实现一个测试用例。但是Afterjob在测试完成后仍然执行。
在我的测试用例中,我有一个无限循环,我正在检查作业执行是否正在运行。完成后,我正在检查断言。
@Test
public void testPostalJob_valid_response() throws Exception {
String fileName = getFileName(FileLocation.POSTAL_VALID, FileLocation.TEMP_POSTAL_VALID);
JobParametersBuilder jobParametersBuilder = getJobParametersBuilder(fileName);
new NonStrictExpectations () {
{
mailSender.send((SimpleMailMessage) any);
}
};
jobLauncherTestUtils.setJob(postalJob);
jobLauncherTestUtils.setJobLauncher(dataloadJobLauncher);
JobExecution jobExecution = jobLauncherTestUtils.launchJob(jobParametersBuilder.toJobParameters());
Assert.assertEquals(jobExecution.getStatus(), BatchStatus.STARTING);
Thread.sleep(2000);
while (jobExecution.isRunning()) {
}
Assert.assertEquals(jobExecution.getStatus(), BatchStatus.COMPLETED);
}
我想测试该作业是否成功完成或失败,但我希望在主应用程序运行后进行。现在我正在使用 while 循环,但我想对异步代码使用更简洁的方式。请帮助我。
解决方案
我得到的最佳解决方案是以同步模式运行异步作业,因为这里的主要思想是测试该作业是否成功运行。
在应用程序中,如果 JobLauncher 名称不是 jobLauncher,那么您无需执行任何操作,否则您必须创建 jobLauncher 并设置为 jobLauncherTestUtils。
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Autowired
private Job postalJob;
@Autowired
private MailServiceImpl mailService;
@BeforeClass
public void setJob() {
jobLauncherTestUtils.setJob(postalJob);
mailService.setMailSender(new JavaMailSenderTestImpl());
}
@Test
public void testPostalJob_valid_response() throws Exception {
String fileName =
TestUtil.getFileName(FileLocation.POSTAL_VALID, FileLocation.TEMP_POSTAL_VALID);
JobParametersBuilder jobParametersBuilder = TestUtil.getJobParametersBuilder(fileName);
JobExecution jobExecution =
jobLauncherTestUtils.launchJob(jobParametersBuilder.toJobParameters());
Assert.assertEquals(jobExecution.getStatus(), BatchStatus.COMPLETED);
}
推荐阅读
- javascript - NW.js 全屏模式其实是无边框窗口化,不是真正的全屏
- ruby - 删除 Ruby 中的重复条目
- java - Check for duplication of number in ArrayList - Java
- mysql - 根据 mySQL 中的不同 id 查找时差
- haskell - 函数组合(Haskell 语言)
- c++ - 如何反转整数参数包?
- python - 下采样后的 f1 或准确度评分 - 分类,支持向量机 - Python
- r - 用点替换单个框并更改R中多个箱线图上的框的顺序
- uml - 如何在 UML 活动图中表示 3 个选项?
- sed - sed 命令查找所有单词都以大写字母开头的行