java - 确保您正确关闭文件的 Java 单元测试的好模式是什么?

标签 java file-io resource-leak

我的代码库中有一个问题,我们没有正确关闭文件句柄,或者可能是流。我们最终在非常重的负载下得到了 TooManyOpenFiles 异常。根据 lsof 的输出,我们非常确定我们知道泄漏在哪里(在我们的日志系统中),但我的问题是:我如何编写单元测试来检查资源是否已正确关闭?有没有办法查询 JRE 以找出当前打开的文件数?我能否以某种方式拦截文件操作以便监控它们?

我怀疑我必须检测我的代码才能管理所有文件 I/O、计算引用并确保它们以这种方式关闭,但是如果有人知道类似于这些想法的自上而下的解决方案我在上面提到过,那将是一个巨大的帮助!

最佳答案

既然你在谈论测试,PowerMock http://code.google.com/p/powermock/可能会成功。如果我没记错的话,它可以模拟静态方法和构造函数。因此,您可以模拟/监视构造函数和关闭方法或释放资源所需的任何东西。

我尽量避免在我的测试中使用它,但在您描述的情况下,这可能是值得的。

关于java - 确保您正确关闭文件的 Java 单元测试的好模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559184/

相关文章:

Java Easymock 提示 "java.lang.IllegalStateException: void method cannot return a value"或 "no last call on a mock available"

java - 如何检查值是否相等?

C 从一个文件读取数据并将其写入另一个文件

ocaml - Lwt 泄漏文件描述符,不确定是 bug 还是我的代码

exception - 如果我的分配GPU内存的类泄漏了被捕获的异常,是否泄漏?

python - 当 .close() 失败时,Python 3 中的文件描述符会发生什么情况?

java - TCP 反向代理 Minecaft 未发送原始 IP

java - 在Android中连接数据库

java - 创建目录

java - 使用多线程java编写自己的文件下载器相关的问题