2013-05-11 4 views
11

Документация JUnit's TemporaryFolder rule утверждает, что она создает файлы и папки, которыеПочему JUnit TemporaryFolder не удаляется?

«гарантированно будет удален, когда метод испытания покрытия (не может ли он проходит или)»

Однако, утверждая, что TemporaryFolder не существует:

import static org.junit.Assert.*; 

import org.junit.After; 
import org.junit.Before; 
import org.junit.Rule; 
import org.junit.Test; 
import org.junit.rules.TemporaryFolder; 

public class MyTest { 

    @Rule 
    public TemporaryFolder _tempFolder = new TemporaryFolder(); 

    @After 
    public void after() { 
     assertFalse(_tempFolder.getRoot().exists()); //this assertion fails! 
    } 

    @Test 
    public void pass() throws IOException { 
     assertTrue(true); 
    } 

Я также вижу, что файл действительно существует в файловой системе.

Почему это не удаляется?

+0

временная папка будет удалена, если не существует блокировка (например, не закрыт OutputStream) на любой файл в папке темп. – Cengiz

ответ

9

Это потому, что JUnit вызывает after() перед тем, как удалить временную папку. Вы можете проверить временную папку в методе @AfterClass, и вы увидите, что она удалена. Этот тест показывает, что

public class MyTest { 
    static TemporaryFolder _tempFolder2; 

    @Rule 
    public TemporaryFolder _tempFolder = new TemporaryFolder(); 

    @After 
    public void after() { 
     _tempFolder2 = _tempFolder; 
     System.out.println(_tempFolder2.getRoot().exists()); 
    } 

    @AfterClass 
    public static void afterClass() { 
     System.out.println(_tempFolder2.getRoot().exists()); 
    } 

    @Test 
    public void pass() { 
    } 
} 

выход

true 
false 
+0

Отлично, спасибо! Документация здесь немного вводит в заблуждение. – jveldridge

+1

У меня такая же проблема, я тестирую ее в AfterClass, и она там тоже не удаляется, я попытался закрыть все открытые потоки, Что еще может быть причиной того, что временные файлы и папки не будут удалены – Snedden27

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