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

Документация для правила 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);
    }

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

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

Ответ 1

Это связано с тем, что 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