【问题标题】:Why isn't JUnit TemporaryFolder deleted?为什么不删除 JUnit TemporaryFolder?
【发布时间】:2013-05-11 06:24:31
【问题描述】:

JUnit's TemporaryFolder rule 的文档指出它创建的文件和文件夹是

"保证在测试方法结束时被删除(无论是 通过或失败)”

但是,断言 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);
    }

我还看到该文件确实存在于文件系统上。

为什么没有被删除?

【问题讨论】:

  • 如果临时文件夹中的任何文件被锁定(例如未关闭OutputStream),临时文件夹将不会被删除。

标签: java junit


【解决方案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

【讨论】:

  • 我有同样的问题,我在 AfterClass 中测试它,它也没有在那里删除,我尝试关闭所有打开的流,还有什么可能导致临时文件和文件夹不存在已删除
  • 我尝试创建一个@AfterClass 方法来检查是否存在,然后我手动尝试删除该文件夹,但它不会。创建的文件不见了,但原来的junit文件夹不见了
【解决方案2】:

我偶然发现这个问题面临同样的问题,在我的情况下,丢失删除的原因是临时文件夹使用不当。

toString() 方法返回内部文件夹名称,因此当尝试在其中创建新文件时,JUnit 会在项目根目录中创建一个新文件夹。 添加 getRoot() 方法解决了这个问题。

这是我责备的代码:

@Rule
public TemporaryFolder projectFolder = new TemporaryFolder();
//some lines later...
FileUtils.copyFile(deployFile, new File(projectFolder + "/deploy.xml"));
//how I fixed it
FileUtils.copyFile(deployFile, new File(projectFolder.getRoot() + "/deploy.xml"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多