我正在尝试在JUnit中使用org.junit.rules.TemporaryFolder来测试文件I/O。我已经像这样初始化它:
代码:
@Rule
public TemporaryFolder temporaryFolder;
@Before
public void setup() {
this.temporaryFolder = new TemporaryFolder();
}
@After
public void tearDown() {}
@Test
public void testCsvDataFile() throws IOException {
File testCsvFile = this.temporaryFolder.newFile("text.csv");
FileWriter csvFileWriter = new FileWriter(testCsvFile);
BufferedWriter bufferedWriter = new BufferedWriter(csvFileWriter);
bufferedWriter.write("col1,col2,col3\n");
bufferedWriter.write("1,test1,val1\n");
bufferedWriter.write("2,test2,val2\n");
bufferedWriter.close();
Map<Long,Data> data = MyReader.readCSV(testCsvFile);
assertTrue(2 == data.size());
}
然而,我遇到了一个异常:
异常:
java.lang.IllegalStateException: the temporary folder has not yet been created
at org.junit.rules.TemporaryFolder.getRoot(TemporaryFolder.java:127)
at org.junit.rules.TemporaryFolder.newFile(TemporaryFolder.java:64)
当我查看 TemporaryFolder 代码时,发现在 getRoot() 函数中使用了一个内部属性 folder,但从未设置过。构造函数设置了另一个字段 parentFolder。
有一个 create() 方法可设置 folder 变量,但标为仅供测试目的。
我正在使用 JDK 1.7。我是否错误地构建了 TemporaryFolder?还需要设置其他系统属性吗?