Почему 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