有一种方法可以读取文件并执行某些操作:
public void readFileAndDoSomething(File file) {
InputStream inputStream = new FileInputStream(file);
// a lot of complex code which reads the inputStream
// and we don't know if the inputStream is closed or not
}
现在我想测试该方法,以确保是否关闭了使用该文件的任何输入流。
我的测试代码:
public void test() {
File testFile = new File("my_test_file");
readFileAndDoSomething(testFile);
// is it possible to just check the file to make sure
// if it is still used by some unclosed input streams?
}
请在test
方法中查看我的评论,是否可以?
答案 0 :(得分:1)
至少在LINUX中是可能的,但不是直接在Java中。
LINUX有一个名为lsof
的实用程序,它可以判断给定文件是否在某个进程中处于打开状态。您可以使用Runtime.exec或ProcessBuilder调用此实用程序。
在Windows中,我不确定,但你不能尝试打开文件进行写作吗?如果仍然有人打开该文件,它应该不起作用。
答案 1 :(得分:1)
要使此版本可测试,您应该传递InputStream
而不是File
。
这样你可以自己关闭InputStream
,或者编写一个传递模拟InputStream
的测试,并验证该方法是否已关闭它。
public void readStreamAndDoSomething(InputStream inputStream) {
// a lot of complex code which reads the inputStream
// and we don't know if the inputStream is closed or not
}
public void clientCode(File file) {
InputStream inputStream = new FileInputStream(file);
readStreamAndDoSomething(inputStream);
inputStream.close();
}