Confirming with JUnit test that FileReader was closed properly
I am writing Java code that uses FileReader to load data from multiple input files. I use TDD quite heavily and I would like to add some tests to ensure that I clean up properly by calling close () on the reader when I'm done with it. Unfortunately, I cannot think of a good way to test this. Does anyone have any idea?
Edited to add: I know I can explicitly test a closed call using mock objects, but I would like to avoid it if possible, partly because I find they lead to somewhat more short-lived code, and partly because I'm curious if it's possible to write code that can recognize the effects of not closing a file.)
source to share
I think the way to do it is to embed the FileReader or Factory that creates the FileReader into your class. Then in the unit test, you can inject a mock version of the FileReader and check if the correct method has been called. You might want to look at JMock to create a mock FileReader and set up to wait for the close method to be called.
source to share
One way that should work is to check the ready () method after the FileReader is closed, which should throw an exception. For example:
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);
source to share