Мое требование - написать модульные тесты для логики, которая вращается вокруг bean-компонента, который выполняет вызовы на уровень персистентности.В основном это вызовы StoredProcs, и цель состоит не в том, чтобы проверить правильность хранимых процедур, а в том, чтобы логика в классе была точной.
В этой степени я хотел бы каким-то образом высмеивать вызовы.к постоянному слою, но не нашли легкий способ сделать это.Я подозреваю, что это потому, что на самом деле это не идеальный / рекомендуемый подход (классы персистентного уровня должны теоретически тестироваться с помощью интеграционных тестов).
Однако в данном конкретном случае мне комфортно насмехаться над уровнем персистентности.Учитывая следующий фрагмент кода:
public boolean isUserDataPresent(String username, PersistenceManager pm) throws IzoneBusinessException {
// call the last date the data was refreshed
LastOperation lastOp = getLastOperation(username, pm);
return username != null && lastOp!= null && lastOperation.getActiveMergeDate() != null;
}
, где getLastOperation()
- это закрытый метод, который обращается к БД через вызовы к PersistenceManager
и возвращает закрытый внутренний объект LastOperation
, как я могу безопасно и эффективнопроверить этот метод?
private LastOperation getLastOperation(String username, PersistenceManager pm) {
LastOperation lastOperation = null;
try (CallableStatement cstmt = pm.getConnection().prepareCall("{call GetLastOperation(?)}")) {
cstmt.setString(1, username);
if (cstmt.execute()) {
ResultSet resultSet = cstmt.getResultSet();
if (resultSet.next()) {
lastOperation= new LastOperation(resultSet.getTimestamp(1));
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return lastOperation;
}