为什么没有删除JUnit TemporaryFolder?

jve*_*dge 15 java junit

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);
    }
Run Code Online (Sandbox Code Playgroud)

我也看到文件确实存在于文件系统中.

为什么这不会被删除?

Evg*_*eev 10

这是因为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() {
    }
}
Run Code Online (Sandbox Code Playgroud)

产量

true
false
Run Code Online (Sandbox Code Playgroud)

  • 我有同样的问题,我在AfterClass中测试它,它也没有删除,我试图关闭所有打开的流,还有什么可以导致临时文件和文件夹不被删除 (3认同)