Java TemporaryFolder getRoot()异常

时间:2014-04-03 17:08:34

标签: java junit

我试图在我的一个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()中使用了一个永远不会设置的内部属性文件夹。构造函数设置一个不同的字段:parentFolder。

有一个create()方法设置文件夹变量,但标记的文件仅用于测试目的。

我使用的是JDK 1.7。我是否错误地构建了TemporaryFolder?还有什么需要为此设置的系统属性吗?

1 个答案:

答案 0 :(得分:7)

无法在setup()中调用构造函数,它必须是:

   @Rule
   public TemporaryFolder temporaryFolder = new TemporaryFolder();

   @Before 
   public void setup() {...}

   @After
   public void tearDown() {...}