2010-04-27 4 views
13

Я создаю TemporaryFolder с использованием аннотации @Rule в JUnit 4.7. Я попытался создать новую папку, которая является дочерней временной папкой, используя tempFolder.newFolder("someFolder") в методе @Before (настройка) моего теста. Кажется, что временная папка инициализируется после запуска метода установки, то есть я не могу использовать временную папку в методе настройки. Это правильное (и предсказуемое) поведение?JUnit Rule TemporaryFolder

ответ

8

Это проблема в Junit 4.7. Если вы обновите новый Junit (например, 4.8.1), все @Rule будут запущены при вводе метода @Before: s. Связанный отчет об ошибке состоит в следующем: https://github.com/junit-team/junit4/issues/79

+0

спасибо. больные должны обновиться. –

+2

Я бы не стал даже с JUnit 4.8.2, что в Windows 7 правило TemporaryFolder работает некорректно. Похоже, это вопрос с разрешениями. – exception

+1

ссылка не работает; рабочий: https://github.com/junit-team/junit4/issues/79 – jwd

6

Это тоже работает. EDIT, если в методе @Before он похож на вызов myfolder.create(). И это, вероятно, плохая практика, так как javadoc говорит, что нельзя называть TemporaryFolder.create(). 2nd Edit Похоже, вам нужно вызвать метод для создания временных каталогов, если вы не хотите их в методах @Test. Также убедитесь, что вы закрываете все файлы, которые вы открываете в каталоге temp, или они не будут автоматически удалены.

<imports excluded> 

public class MyTest { 

    @Rule 
    public TemporaryFolder myfolder = new TemporaryFolder(); 

    private File otherFolder; 
    private File normalFolder; 
    private File file; 

    public void createDirs() throws Exception { 
    File tempFolder = myfolder.newFolder("folder"); 
    File normalFolder = new File(tempFolder, "normal"); 
    normalFolder.mkdir(); 
    File file = new File(normalFolder, "file.txt"); 

    PrintWriter out = new PrintWriter(file); 
    out.println("hello world"); 
    out.flush(); 
    out.close(); 
    } 

    @Test 
    public void testSomething() { 
    createDirs(); 
    .... 
    } 
} 
+0

Хотя это создает новую папку, tempFolder фактически не находится в временном расположении (он находится в вашем рабочем каталоге), потому что myFolder не был установлен во временное местоположение. Он также не будет очищен. –

+0

Это оставляет каталоги в каталоге $ TEMP или% TEMP%, поэтому все еще ищет реальный ответ. –

Смежные вопросы