Я использую временную папку в своем модульном тесте с использованием @Rule of JUnit. Папка не удаляется после завершения испытаний sh
Java версия: 1.8
JUnit версия: 4.12
Os windows 10
Я создаю файл .csv в папке temp для его редактирования с помощью CSVPrinter из org. apache .commons
public class MyService {
public void createCSVFile(String basePath) {
try (FileWriter out = new FileWriter(format("%s/file.csv", basePath));
CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT.withHeader(HEADERS))) {
//printer.PrintRecord(args);
} catch (IOException e) {
log.error("Failed to create file.csv under " + basePath, e);
}
}
}
Тест:
@Rule
public TemporaryFolder folder = new TemporaryFolder();
private String folderPath;
private MyService myService;
@Before
public void setup() throws IOException {
folder.newFile("file.csv");
folderPath = folder.getRoot().getPath();
}
@Test
public void testing_myService() {
myService.createCSVFile(folderPath);
//Assert
}
Когда я открываю папку, например: C: \ Users \ me \ AppData \ Local \ Temp \ junit2290989758736528709 Я все еще вижу файл .csv, поскольку он не был удален
Я пытался перенести создание файла, чтобы стать в тестах. Это не помогло
@Test
public void testing_myService() {
folder.newFile("file.csv");
myService.createCSVFile(folder.getRoot().getPath());
//Assert
}
Я добавил метод @After для удаления папки
@After
public void cleanup() throws IOException {
//Tried several ways to delete the folder and file as well
//FileUtils.forceDelete(folder.getRoot().getAbsoluteFile());
//folder.getRoot().delete();
//FileUtils.deleteDirectory(folder.getRoot());
//new File(folderPath +"/file.csv").delete();
//All methods did not delete neither the direcotry (with exception can't delete file.csv) nor deleted the file.csv
}
Я также пытался сам вызывать folder.create();
и folder.delete();
, не используя @Rule Но папка также не была удалена
Файл.csv и папка помечаются как только для чтения при просмотре свойств на windows
I попытался изменить это в коде
folder.setWritable(true);
folder.setReadable(true);
folder.setExecutable(true);
Не удалось также удалить папку
Моя цель - найти решение, которое работает для любой среды, где код извлекается Например: конвейер CI на сервере linux и на windows
Есть ли другие причины такого поведения?