title: Mockito- mocking database calls
body: <p>I have tried to mock the following method with Mockito which returns user details.</p>
  
  <p>It is making the actual call to the database instead of returning the mock results.</p>
  
  <p><strong>My method-</strong> </p>
  
  <pre><code>public User getUserById(String userId){
      if (userId == null) {
          throw new IllegalArgumentException("AssociateId cannot be null");
      }
      User user = new User();
      preparedStatement = null;
      try {
          connection = dbConnection.openConnection(properties, inputStream);
          query = queryReader
                  .getQuery(RelationshipManagerConstants.selectUser);
          preparedStatement = connection.prepareStatement(query);
          preparedStatement.setString(I_User.associateId, userId);
          resultSet = preparedStatement.executeQuery();
          if (resultSet.next()) {
              user.setAssociateId(resultSet.getString(I_User.associateId));
              user.setAssociatePassword(resultSet
                      .getString(I_User.associatePassword));
              user.setAssociateRole(resultSet.getInt(I_User.associateRole));
              user.setAssociateIsActive(resultSet
                      .getBoolean(I_User.associateIsActive));
              user.setAssociateEmail(resultSet
                      .getString(I_User.associateEmail));
          }
      } catch (ClassNotFoundException e) {
          LOGGER.warning("Cannot return User Details. ClassNotFoundException occured.");
      } catch (SQLException e) {
          LOGGER.warning("Cannot return User Details. SQLException occured.");
      } catch (IOException e) {
          LOGGER.warning("Cannot return User Details. IOException occured.");
      } finally {
          if (resultSet != null) {
              try {
                  resultSet.close();
              } catch (SQLException e) {
                  LOGGER.warning("Failed to close resultSet.");
              }
          }
          if (preparedStatement != null) {
              try {
                  preparedStatement.close();
              } catch (SQLException e) {
                  LOGGER.warning("Failed to close statement.");
              }
          }
          if (connection != null) {
              try {
                  connection.close();
              } catch (SQLException e) {
                  LOGGER.warning("Failed to close connection.");
              }
          }
      }
      return user;
  }
  </code></pre>
  
  <p><strong>My test-</strong></p>
  
  <pre><code>@Test
  public void testGetUserById() throws Exception {
      mockConnection = Mockito.mock(Connection.class);
      Properties mockProperties =  Mockito.mock(Properties.class);
      InputStream mockInputStream = Mockito.mock(InputStream.class);
      DBConnection mockDbConnection = Mockito.mock(DBConnection.class);
      PreparedStatement mockPreparedStatement = Mockito.mock(PreparedStatement.class);
      ResultSet mockResultSet = Mockito.mock(ResultSet.class);
      QueryReader mockQueryReader = Mockito.mock(QueryReader.class);
  
  
      PowerMockito.whenNew(DBConnection.class).withNoArguments()
      .thenReturn(mockDbConnection);
      PowerMockito.whenNew(QueryReader.class).withNoArguments()
      .thenReturn(mockQueryReader);
  
  
      String query = "select * from User where AssociateID=?;";
      Mockito.when(mockDbConnection.openConnection(mockProperties, mockInputStream)).thenReturn(mockConnection);
      Mockito.when(mockQueryReader.getQuery("sqlScript_selectUser.sql")).thenReturn("query");
      Mockito.when(mockConnection.prepareStatement("query")).thenReturn(mockPreparedStatement);
      Mockito.when(mockPreparedStatement.executeQuery()).thenReturn(mockResultSet);
      Mockito.when(mockResultSet.next()).thenReturn(true);
  
      Mockito.when(mockResultSet.getString(1)).thenReturn("message");
      User u=userDAO.getUserById("AB1234");
      assertEquals("EX112233", u.getAssociateId());
  }
  </code></pre>
  
  <p>My test should fail as I am returning "message" However, I am asserting with "EX112233"</p>
  
  <p>But It is making call to the database instead of mocking. </p>
  
  <p>Thanks in advance.</p>