Pytanie Dlaczego nie usunięto JUnit TemporaryFolder?


Dokumentacja dla JUnit's TemporaryFolder rule stwierdza, że ​​tworzy pliki i foldery

"gwarantowane usunięcie po zakończeniu metody testowania (bez względu na to, czy   przechodzi lub zawiedzie) "

Jednak twierdzenie, że tymczasowy folder nie istnieje, nie udaje się:

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

Widzę również, że plik rzeczywiście istnieje w systemie plików.

Dlaczego to nie jest usuwane?


11
2018-05-11 06:24


pochodzenie


Folder tymczasowy nie zostanie usunięty, jeśli na dowolnym pliku w folderze tymczasowym znajduje się blokada (na przykład nie jest zamknięta). - Cengiz


Odpowiedzi:


Wynika to z tego, że JUnit wywołuje funkcję after (), zanim usunął folder tymczasowy. Możesz spróbować sprawdzić folder tymczasowy w metodzie @AfterClass, a zobaczysz, że został usunięty. Ten test to potwierdza

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

wydajność

true
false

9
2018-05-11 06:36



Wielkie dzięki! Dokumentacja jest tu trochę myląca. - jveldridge
Mam ten sam problem, testuję go w AfterClass i tam też go nie usuwam, próbowałem zamknąć wszystkie otwarte strumienie, Co jeszcze może powodować, że tymczasowe pliki i foldery nie zostaną usunięte - Snedden27