Мы используем 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()
в контексте насмешек? Если нет, пожалуйста, поправьте меня.