2013-05-11 7 views
11

Die Dokumentation für JUnit's TemporaryFolder rule besagt, dass es Dateien und Ordner erstellt, dieWarum wird JUnit TemporaryFolder nicht gelöscht?

„garantiert gelöscht werden, wenn die Testverfahren beendet (ob es besteht oder nicht)“ sind

jedoch behaupten, dass die TemporaryFolder existiert nicht versagt:

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); 
    } 

ich sehe auch, dass die Datei auf dem Dateisystem in der Tat existiert.

Warum wird das nicht gelöscht?

+0

Der Temp-Ordner wird nicht gelöscht werden, wenn es eine Sperre (z nicht geschlossen Output) auf eine beliebige Datei im temporären Ordner. – Cengiz

Antwort

9

Dies liegt daran, dass JUnit after() aufruft, bevor der temporäre Ordner entfernt wurde. Sie können versuchen, den temporären Ordner in einer @ AfterClass-Methode zu überprüfen, und Sie werden sehen, dass er entfernt wurde. Dieser Test beweist es

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() { 
    } 
} 

Ausgang

true 
false 
+0

Großartig, danke! Die Dokumentation ist hier ein bisschen irreführend. – jveldridge

+1

Ich habe das gleiche Problem, ich teste es in der AfterClass, und es löscht es auch nicht, ich habe versucht, alle offenen Streams zu schließen, Was sonst kann dazu führen, dass die temporären Dateien und Ordner nicht gelöscht werden – Snedden27

Verwandte Themen