Java TemporaryFolder getRoot() 异常

5

我正在尝试在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?还需要设置其他系统属性吗?
1个回答

8
构造函数不能在setup()中调用,必须满足以下条件:
   @Rule
   public TemporaryFolder temporaryFolder = new TemporaryFolder();

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接