我正在尝试在我的一个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());
}
但是,我得到一个异常(exception):
异常(exception):
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()中使用了内部属性文件夹。构造函数设置一个不同的字段:parentFolder。
有一个create()方法可设置文件夹变量,但将其标记为仅用于测试目的。
我正在使用JDK 1.7。我是否错误地构造了TemporaryFolder?还有什么需要为此设置的系统属性吗?
最佳答案
构造函数不能在setup()中调用,它必须是:
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Before
public void setup() {...}
@After
public void tearDown() {...}