Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果作业使用SimpleAsynctAskeExecutor运行,如何在spring批处理中编写测试用例_Java_Spring Boot_Spring Batch - Fatal编程技术网

Java 如果作业使用SimpleAsynctAskeExecutor运行,如何在spring批处理中编写测试用例

Java 如果作业使用SimpleAsynctAskeExecutor运行,如何在spring批处理中编写测试用例,java,spring-boot,spring-batch,Java,Spring Boot,Spring Batch,我有一个spring批处理作业,它正在使用SimpleAsyncTaskExecutor运行。我必须为一个作业实现一个测试用例。但在测试完成后,Afterjob仍然执行 在我的测试用例中,我有一个无限循环,我在其中检查作业执行是否正在运行。当它完成时,我正在检查断言 @Test public void testPostalJob_valid_response() throws Exception { String fileName = getFileName(FileLocation.P

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

我得到的最佳解决方案是在同步模式下运行异步作业,因为这里的主要思想是测试该作业是否成功运行

在应用程序中,如果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);
}