【发布时间】:2020-03-24 20:14:51
【问题描述】:
我们使用 Coverity 来识别 Java 代码中潜在的安全和质量缺陷。在我们的一个单元测试中,我们进行了一些涉及数据库连接代码的测试:
Connection connection = mock(Connection.class);
Statement statement = mock(Statement.class);
when(connection.createStatement()).thenReturn(statement);
Coverity 抱怨潜在的资源泄漏:
CID 21920:资源泄漏 (RESOURCE_LEAK)4。 leaked_resource: 无法保存或关闭 connection.createStatement() 创建的资源
我对 Mockito 工作原理的理解是,connection.getStatement() 从未真正被调用过,因此不会创建需要稍后关闭的语句。 (这与数据库中需要关闭 JDBC 连接的典型情况形成对比。)
我的理解正确吗?公平地说,这是来自 Coverity 的虚假报告,是由 getConnection() 在嘲笑的背景下的非典型行为引起的吗?如果不是,请纠正我。
【问题讨论】:
标签: jdbc mockito coverity resource-leak