Как написать контрольный пример в весеннем пакете, если задание выполняется с simpleAsyncTaskExecutor - PullRequest
1 голос
/ 03 июня 2019

У меня есть весеннее пакетное задание, которое выполняется с 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, но я хочу использовать более чистый способ для асинхронного кода. Пожалуйста, помогите мне за то же самое.

1 Ответ

0 голосов
/ 05 июня 2019

Лучшее решение, которое я получил, - запустить асинхронное задание в синхронном режиме, потому что здесь основная идея состоит в том, чтобы проверить, успешно выполняется задание или нет.

В приложении, если имя 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...