我正在使用JUnit 4.7中的@Rule
注解创建一个TemporaryFolder
。我尝试在测试的@Before
(设置)方法中使用tempFolder.newFolder("someFolder")
来创建一个临时文件夹的子文件夹,但似乎这个临时文件夹是在设置方法运行后才初始化的,这意味着我不能在设置方法中使用临时文件夹。这是正确的(可预测的)行为吗?
我正在使用JUnit 4.7中的@Rule
注解创建一个TemporaryFolder
。我尝试在测试的@Before
(设置)方法中使用tempFolder.newFolder("someFolder")
来创建一个临时文件夹的子文件夹,但似乎这个临时文件夹是在设置方法运行后才初始化的,这意味着我不能在设置方法中使用临时文件夹。这是正确的(可预测的)行为吗?
这是Junit 4.7中的一个问题。如果您升级到更新的Junit(例如4.8.1),当您进入@Before方法时,所有的@Rule都将被执行。相关的错误报告在此处:https://github.com/junit-team/junit4/issues/79
这也可以工作。如果在@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();
....
}
}