13

我正在TemporaryFolder使用@RuleJUnit 4.7 中的注释创建一个。我尝试使用我的测试tempFolder.newFolder("someFolder")@Before(设置)方法创建一个新文件夹,它是临时文件夹的子文件夹。似乎临时文件夹在 setup 方法运行后被初始化,这意味着我不能在 setup 方法中使用临时文件夹。这是正确的(和可预测的)行为吗?

4

2 回答 2

8

这是 Junit 4.7 中的一个问题。如果您升级较新的 Junit(例如 4.8.1),当您输入 @Before 方法时,所有 @Rule 都将运行:s。一个相关的错误报告是这样的:https ://github.com/junit-team/junit4/issues/79

于 2010-05-05T13:25:33.250 回答
6

这也有效。 编辑如果在 @Before 方法中看起来 myfolder.create() 需要调用。这可能是不好的做法,因为 javadoc 说不要调用 TemporaryFolder.create()。 第二次编辑看起来你必须调用方法来创建临时目录,如果你不希望它们出现在 @Test 方法中。还要确保关闭在临时目录中打开的所有文件,否则它们不会被自动删除。

<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();
    ....
  }
}
于 2010-04-27T16:39:07.850 回答