Я пытаюсь протестировать метод службы, который выдает исключение runtimeexception в задании executorservice. Однако, похоже, что тест не уловил его. Я полагаю, потому что тест завершается до завершения работы исполнителя. Какой трюк, чтобы найти решение, синхронизировать тест или что-то?
Метод обслуживания
public void migrateSplitFile(String runtimeWorkspace, File jobFile, File errorFile, String inputFile) {
ExecutorService executorService = Executors.newFixedThreadPool(maxImportJobs);
executorService.execute(()->{
try {
importSingleFile(runtimeWorkspace, jobFile, errorFile, inputFile);
} catch (IOException e) {
throw new RuntimeException("Failed running import for file [" + inputFile + "]", e);
}
});
}
private void importSingleFile(String runtimeWorkspace, File jobFile, File errorFile, String inputFile) throws IOException {
Optional<RunningJob> jobResult = importJobManager.executeImport(inputFile, runtimeWorkspace);
if (jobResult.isPresent()) {
RunningJob job = jobResult.get();
fileUtils.writeStringToFile(jobFile, "Ran job [" + job.getJobId() + "] for input file [" + inputFile + "]");
} else {
fileUtils.writeStringToFile(errorFile, "input file [" + inputFile + "] failed to process");
}
}
Тест
@Test
void migrateSplitFileRuntimeException() {
assertThrows(RuntimeException.class,
() -> {
String runtimeWorkspace = "./test";
File testDir = new File(runtimeWorkspace + "/inputfiles");
FileUtils.forceMkdir(testDir);
File fakeInputFile = new File(runtimeWorkspace + "/inputfiles/test.txt");
FileUtils.writeStringToFile(fakeInputFile, "test", "UTF-8", true);
String inputFile = ".\\test\\inputfiles\\test.txt";
File jobFile = new File(runtimeWorkspace + "/jobs.txt");
File errorfile = new File(runtimeWorkspace + "/errors.txt");
Mockito.doThrow(new Auth0Exception("")).when(importJobManager).executeImport(inputFile, runtimeWorkspace);
auth0EngineService.migrateSplitFile(runtimeWorkspace, jobFile, errorfile, inputFile);
FileUtils.deleteDirectory(new File(runtimeWorkspace));
});
}
Я открыт для любого предложения, прежде чем я внедрил executorservice, мой тест работал