【问题标题】:Connection not closed even if call is verified即使验证呼叫,连接也不会关闭
【发布时间】:2020-09-25 09:22:15
【问题描述】:

你能帮我理解这段代码吗?

我正在尝试验证数据库连接是否已关闭。 即使 Mocikto 验证 close() 方法被调用,连接也没有关闭。

我正在测试的代码(它在 con.close() 中使用):

public static void closeConnection(CallableStatement cs, Connection conn) {
    JdbcUtils.closeStatement(cs);
    JdbcUtils.closeConnection(conn);
}

并测试:

public class DataProviderTest {

    @InjectMocks
    DataProvider dataProvider;

    @Mock
    OracleConnection oracleConnection;

    @Mock
    DatabaseMetaData databaseMetadata;

    @Mock
    PoolDataSource dataSource;

    @Mock
    OracleCallableStatement oracleCallableStatement;

    @BeforeEach
    public void setUp() throws SQLException {
        MockitoAnnotations.initMocks(this);
        ReflectionTestUtils.setField(dataProvider, "parseSQLErrorFuntion", "Some SQL error function");
        Mockito.when(dataSource.getConnection()).thenReturn(oracleConnection);
        Mockito.when(oracleConnection.getMetaData()).thenReturn(databaseMetadata);
        Mockito.when(oracleConnection.prepareCall(Mockito.anyString())).thenReturn(oracleCallableStatement);
    }

    @Test
    public void closeConnectionTest() throws SQLException {
        OracleConnection connection = dataProvider.getConnection();
        OracleCallableStatement statement = oracleCallableStatement;
        assertFalse(connection.isClosed());
        dataProvider.closeConnection(statement, connection);
        Mockito.verify(connection, Mockito.atLeast(1)).close(); //pass
        Mockito.verify(statement, Mockito.atLeast(1)).close();  //pass

        assertTrue(connection.isClosed()); // expected: <true> but was: <false>

    }

}

【问题讨论】:

  • 您可能需要考虑切换到 try-with-resources,而不是使用像 closeConnectionJdbcUtils.closeStatement/closeConnection 这样的方法;随着 Java 7 中引入 try-with-resources,这些拐杖在很大程度上已经过时和不必要了。
  • @MarkRotteveel 如果可以的话我会的:)

标签: java spring jdbc junit mockito


【解决方案1】:

您的测试中的连接是一个模拟对象,因此运行 close 方法实际上不会将 isClosed 的值从 false 更改为 true。
你可以删除最后一个断言,因为它是一个模拟,你只需要验证关闭方法是在连接上执行的,你不需要验证它做了什么。

【讨论】:

    猜你喜欢
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多