我的代码库中有一个问题,我们没有正确关闭文件句柄,或者可能是流。我们最终在非常重的负载下得到了 TooManyOpenFiles 异常。根据 lsof 的输出,我们非常确定我们知道泄漏在哪里(在我们的日志系统中),但我的问题是:我如何编写单元测试来检查资源是否已正确关闭?有没有办法查询 JRE 以找出当前打开的文件数?我能否以某种方式拦截文件操作以便监控它们?
我怀疑我必须检测我的代码才能管理所有文件 I/O、计算引用并确保它们以这种方式关闭,但是如果有人知道类似于这些想法的自上而下的解决方案我在上面提到过,那将是一个巨大的帮助!
最佳答案
既然你在谈论测试,PowerMock http://code.google.com/p/powermock/可能会成功。如果我没记错的话,它可以模拟静态方法和构造函数。因此,您可以模拟/监视构造函数和关闭方法或释放资源所需的任何东西。
我尽量避免在我的测试中使用它,但在您描述的情况下,这可能是值得的。
关于java - 确保您正确关闭文件的 Java 单元测试的好模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559184/