这是我正在测试的方法以及测试代码。我的测试方法取决于 runExecuteQueryStatement 生成的结果集。如果 resultSet 为 null 并且 resultSet.next 为 false,则当 resultSet.next 返回某些内容时,它将返回 0,否则将返回 1。这就是我嘲笑 ResultSet ResultSet.next() 的原因。但我仍然得到 0 作为返回值。任何帮助都感激不尽。谢谢
被测方法
int result = 0;
try {
ResultSet resultSet = runExecuteQueryStatement(dbServerConn, "SELECT 1 AS cnt FROM pg_database WHERE datname ='" + dbName + "';");
while (resultSet.next()) {
result = resultSet.getInt("cnt");
}
}catch(Exception ex) {
logger.error(ex.getMessage());
}
return result;
依赖方法代码 (runExecuteQueryStatement)
ResultSet resultSet = null;
Connection conn = getConnection(dbServerConn);
Statement stmt = conn.createStatement();
resultSet = stmt.executeQuery(sqlStatement);
return resultSet;
测试代码
PostgresDatabaseManager pgManagerMock = Mockito.mock(PostgresDatabaseManager.class);
DbConnection dbConnectionMock = Mockito.mock(DbConnection.class);
String sqlStatementMock = SOME_STRING;
ResultSet resultSetMock = Mockito.mock(ResultSet.class);
Mockito.when(resultSetMock.next()).thenReturn(TRUE).thenReturn(FALSE);
Mockito.when(resultSetMock.getInt("cnt")).thenReturn(1);
Mockito.when(pgManagerMock.runExecuteQueryStatement(dbConnectionMock, sqlStatementMock)).thenReturn(resultSetMock);
Mockito.when(pgManagerMock.runExecuteQueryStatementWrapperForCheckDBExists(dbConnectionMock, sqlStatementMock)).thenCallRealMethod();
int actualResult = pgManagerMock.runExecuteQueryStatementWrapperForCheckDBExists(dbConnectionMock, sqlStatementMock);
int expectedResult = 1;
Assert.assertEquals(expectedResult, actualResult);