Я начал обнаруживать библиотеку Мокито, и есть вопрос, для которого я не нашел правильного ответа.Как проверить методы DAO с помощью Mockito?
Если у меня есть, например, такой метод в моем классе UserDAO, который сохраняет в базе данных пользователя:
public class UserDAO{
...
public void create(User user) {
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet generatedKeys = null;
try {
connection = getConnection();
pstmt = connection.prepareStatement(INSERT_USER,
PreparedStatement.RETURN_GENERATED_KEYS);
int counter = 1;
pstmt.setString(counter++, user.getFirstName());
pstmt.setString(counter++, user.getLastName());
pstmt.setString(counter++, user.getEmail());
pstmt.setString(counter++, user.getPassword());
pstmt.setString(counter++, user.getRole());
pstmt.setString(counter, user.getLang());
pstmt.execute();
connection.commit();
generatedKeys = pstmt.getGeneratedKeys();
if (generatedKeys.next()) {
user.setId(generatedKeys.getInt(Fields.GENERATED_KEY));
}
} catch (SQLException e) {
rollback(connection);
LOG.error("Can not create a user", e);
} finally {
close(connection);
close(pstmt);
close(generatedKeys);
}
}
....
}
Как я должен это проверить?
Если я хочу протестировать, например, класс DAO, мне нужно создать макет DataSource
, Connection
mock, mock и т. Д.? И чтобы не тестировать базу данных?
Но что, если я хочу также проверить поведение dao и базы данных?
Не могли бы вы предоставить образцы кода, ссылки, которые могут быть полезны и показать лучшие подходы к его выполнению?
Правильный DAO не должен управлять транзакциями, то есть не совершать или откатываться. Обычно демаркация транзакций выполняется на более высоком уровне, и обычно (Java EE, Spring и т. Д.) Применяется неявно. –