4

如何编写 JUnit 测试来检查 FileInputStream 是否已关闭?

考虑以下代码,

import java.io.FileInputStream;

class FileInputStreamDemo {

  public static void main(String args[]) throws Exception {
    FileInputStream fis = new FileInputStream(args[0]);

    // Read and display data
    int i;
    while ((i = fis.read()) != -1) {
      System.out.println(i);
    }

    fis.close();

  }
}

我想写一个这样的测试:

@Test
public void test() {
  FileInputStreamDemo.main("file.txt");
  // test here, if input stream to file is closed correctly
}

虽然这个代码示例没有多大意义,但我现在想知道如何编写一个 JUnit 测试来检查 FIS 是否已关闭。(如果可能:甚至没有对原始 FIS 对象的引用)

4

1 回答 1

3

您应该创建一个名为 MyFileReader 的单独类来完成读取文件的工作。然后,您创建一个 MyFileReaderTest 类,该类实例化您的新类并调用其中的方法来测试它的行为是否正确。如果您使 fis 成为 MyFileReader 类的受保护成员,则测试可以访问 fis 并验证它是否已关闭。

而不是使用 FileInputStream 你应该使用像 InputStream 这样的接口,这样你就可以创建一个 MockInputStream ,它不会真正创建文件,但会跟踪是否调用了 close() 。然后你可以在你的测试代码中测试它。

于 2012-07-11T18:34:47.070 回答