java - 如果作业使用 simpleAsyncTaskExecutor 运行,如何在 Spring Batch 中编写测试用例

标签 java spring-boot spring-batch

我有使用 SimpleAsyncTaskExecutor 运行的 spring 批处理作业。我必须为作业实现一个测试用例。但测试完成后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);
}

关于java - 如果作业使用 simpleAsyncTaskExecutor 运行,如何在 Spring Batch 中编写测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56421839/

相关文章:

mysql - 使用 Spring Boot JPA 在数据库中插入多行

数据列表中每个项目的 Spring Batch-Repeat 步骤

Java 时间循环 - 迭代

java - 二叉搜索树Tree Implementation,程序终止于eclipse。简单的插入和显示操作

java - Spring Security REST - 单元测试失败,并显示 HttpStatusCode 401 Unauthorized

Spring Batch Process 指示器模式

具有多个作业和 xml 文件的 Spring Batch

java - 为什么我收到 "Exception in thread "main"java.lang.NullPointerException"?

java - Firebase Firestore 库导致 : java. lang.RuntimeException : com. android.builder.dexing.DexArchiveMergerException:无法合并 dex

java - Spring Boot 冲突的 gradle 依赖项 : google oauth client