Используя Gradle с Junit4, как я могу написать тесты для функции, которая проверяет, существует ли набор файлов? Я хочу проверить случай, когда файлы не существуют, и случай, когда они существуют. Насколько я понимаю, тестовые случаи в Junit4 не должны зависеть от порядка, в котором я столкнулся с проблемой, мой тест для случая, когда они существуют, запускается первым и копирует файлы в каталог, и они появляются, когда запускается случай, когда они не существуют.
Я пытался использовать приведенный ниже код для удаления файлов до запуска случая, когда они не существуют, но, используя Files.delete()
, я обнаружил, что их нельзя удалить, поскольку они используется процессом, но единственным процессом, который будет использовать эти файлы, является сам набор тестов, поэтому я не уверен, как обойти это.
public static void clean() {
String buildDir = "build/classes/java/main/";
Properties props = new Properties();
try {
ClassLoader cl = SkippedReportTest.class.getClassLoader();
InputStream in = cl.getResourceAsStream("input.properties");
byte[] buffer = new byte[in.available()];
in.read(buffer);
File propsFile = new File(buildDir + "input.properties");
OutputStream out = new FileOutputStream(propsFile);
out.write(buffer);
InputStream propsIn = cl.getResourceAsStream("input.properties");
props.load(propsIn);
String directory = props.getProperty("directory");
String prefix = props.getProperty("prefix");
String[] names = props.getProperty("names").split(",");
String extension = props.getProperty("extension");
for (String name : names) {
String report = directory + "/" + prefix + name + extension;
File delete = new File(buildDir + report);
Files.delete(delete.toPath());
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
Это ошибка, которую я получаю от Files.delete()
call:
java.nio.file.FileSystemException: build\classes\java\main\MyFile.txt: The process cannot access the file because it is being used by another process.
Вот тестовый пример, который не проходит, потому что файлы копируются в папку до запуска теста, и их нельзя удалить:
@Test
public void testReportsExistFalse() {
SkippedReportTest.clean();
SkippedReport classUnderTest = new SkippedReport();
assertFalse("Return false when reports aren't there",
classUnderTest.reportsExist());
}