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