Программисты JAVA общаются здесь
Anonymous
Mockito — имитирующие вызовы базы данных.
Сообщение
Anonymous » 07 май 2026, 01:03
Я попытался имитировать следующий метод с помощью Mockito, который возвращает данные пользователя.
Он выполняет фактический вызов базы данных вместо возврата макетных результатов.
Мой метод-
Код: Выделить всё
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;
}
Мой тест-
Код: Выделить всё
@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());
}
Мой тест должен завершиться неудачно, поскольку я возвращаю «сообщение». Однако я утверждаю с помощью «EX112233»
Но вместо издевательства он вызывает базу данных.
Заранее спасибо.
1778105025
Anonymous
Я попытался имитировать следующий метод с помощью Mockito, который возвращает данные пользователя. Он выполняет фактический вызов базы данных вместо возврата макетных результатов. [b]Мой метод-[/b] [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] [b]Мой тест-[/b] [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] Мой тест должен завершиться неудачно, поскольку я возвращаю «сообщение». Однако я утверждаю с помощью «EX112233» Но вместо издевательства он вызывает базу данных. Заранее спасибо.