Here is my method under test as well as test code. My method under test depends on the result set produced by runExecuteQueryStatement. If the resultSet is null and resultSet.next is false it is going to return 0 else when the resultSet.next returns something, then it will return 1. That's reason I mocked ResultSet, ResultSet.next(). But still I'm getting 0 as a return value. Any help will be much appreciated. Thanks
Method Under Test
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;
Dependent Method Code (runExecuteQueryStatement)
ResultSet resultSet = null;
Connection conn = getConnection(dbServerConn);
Statement stmt = conn.createStatement();
resultSet = stmt.executeQuery(sqlStatement);
return resultSet;
Test Code
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);