JMockit: Как написать тесты модульного теста для класса, который опирается на уровень постоянства? - PullRequest
0 голосов
/ 30 ноября 2018

Мое требование - написать модульные тесты для логики, которая вращается вокруг 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;
}
...