从JUnit测试确认FileReader已正确关闭

时间:2008-12-11 03:16:51

标签: java unit-testing junit filereader

我正在编写一些使用FileReader从一些输入文件加载数据的Java代码。我正在大量使用TDD,并且我想添加一些测试,以确保在我完成它时通过在阅读器上调用close()来正确清理。不幸的是,我无法想出一个很好的方法来测试它。有人有任何见解吗?

编辑添加:我知道我可以使用模拟对象显式测试close调用,但我想尽可能避免使用它,部分原因是因为我发现它们会导致代码更加轻松,部分因为我很好奇是否可以编写能识别不关闭文件效果的代码。)

3 个答案:

答案 0 :(得分:6)

我认为这样做的方法是将FileReader或创建FileReader的Factory注入您的类。然后在单元测试中,您可以注入FileReader的模拟版本,并检查其上是否已调用正确的方法。您可能希望查看JMock以创建模拟FileReader并设置close方法调用的期望。

答案 1 :(得分:3)

应该工作的一种方法是在关闭应该抛出异常的FileReader之后测试ready()方法。例如:

FileReader fr = new FileReader("somefile");
// ... file reader activity
fr.close();

// After closing the reader, the ready() method should cause an IOException:
boolean isOpen = true;
try {
  isOpen = fr.ready();
} catch (IOException e) {
  isOpen = false;
}
assertFalse("FileReader is still open", isOpen);

答案 2 :(得分:1)

如果你可以将FileReader对象传递给调用,那么你可以提供一个具有重写的close方法的自定义FileReader - 你有一个布尔变量来检查是否关闭。然后,您可以将其用于单元测试。