Java JUnit规则临时文件夹

Java JUnit规则临时文件夹,java,junit,junit-rule,Java,Junit,Junit Rule,我正在使用JUnit4.7中的@Rule注释创建一个临时文件夹。我尝试使用测试的@Before(设置)方法中的tempFolder.newFolder(“someFolder”)创建一个新文件夹,该文件夹是temp文件夹的子文件夹。似乎临时文件夹是在安装方法运行后初始化的,这意味着我不能在安装方法中使用临时文件夹。这是正确的(可预测的)行为吗?这也适用编辑如果在@Before方法中,它看起来像myfolder.create()需要调用。这可能是错误的做法,因为javadoc说不要调用Tempor

我正在使用JUnit4.7中的
@Rule
注释创建一个
临时文件夹。我尝试使用测试的
@Before
(设置)方法中的
tempFolder.newFolder(“someFolder”)
创建一个新文件夹,该文件夹是temp文件夹的子文件夹。似乎临时文件夹是在安装方法运行后初始化的,这意味着我不能在安装方法中使用临时文件夹。这是正确的(可预测的)行为吗?

这也适用编辑如果在@Before方法中,它看起来像myfolder.create()需要调用。这可能是错误的做法,因为javadoc说不要调用TemporaryFolder.create()second Edit如果不想在@Test methods中创建临时目录,则必须调用该方法。还要确保关闭在临时目录中打开的所有文件,否则它们不会被自动删除

<imports excluded>

public class MyTest {

  @Rule
  public TemporaryFolder myfolder = new TemporaryFolder();

  private File otherFolder;
  private File normalFolder;
  private File file;

  public void createDirs() throws Exception {
    File tempFolder = myfolder.newFolder("folder");
    File normalFolder = new File(tempFolder, "normal");
    normalFolder.mkdir();
    File file = new File(normalFolder, "file.txt");

    PrintWriter out = new PrintWriter(file);
    out.println("hello world");
    out.flush();
    out.close();
  }

  @Test
  public void testSomething() {
    createDirs();
    ....
  }
}

公共类MyTest{
@统治
public TemporaryFolder myfolder=新建TemporaryFolder();
私人文件夹;
私人文件夹;
私有文件;
public void createDirs()引发异常{
File tempFolder=myfolder.newFolder(“文件夹”);
File normalFolder=新文件(tempFolder,“normal”);
normalFolder.mkdir();
File File=新文件(normalFolder,“File.txt”);
PrintWriter out=新的PrintWriter(文件);
out.println(“你好世界”);
out.flush();
out.close();
}
@试验
公共空间{
createDirs();
....
}
}

这是JUnit4.7中的一个问题。如果升级较新的Junit(例如4.8.1),则当您输入@Before方法时,所有@Rule都将运行。相关的错误报告如下:

虽然这确实创建了一个新文件夹,但tempFolder实际上不在临时位置(它在您的工作目录中),因为myFolder尚未设置为临时位置。它也不会被清理。这会将目录保留在$TEMP或%TEMP%目录中,因此仍在寻找真正的答案。即使使用JUnit 4.8.2,我也不会认为在Windows 7上临时文件夹规则无法正常工作。看起来是权限问题。链接已断开;工作一: