Тестирование функции, которая проверяет наличие файлов с Junit4 - PullRequest
0 голосов
/ 04 марта 2020

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