我的要求是编写围绕逻辑的单元测试,该逻辑围绕调用持久层的bean进行。这些调用主要是StoredProcs,目的不是要验证存储的procs是否正确,而是要验证类中的逻辑是否正确。
就此而言,我想以某种方式模拟对持久层的调用,但是还没有找到一种简便的方法来做到这一点。我怀疑这是因为它实际上不是理想的/推荐的方法(持久性层类在理论上应该使用集成测试进行测试)。
但是,在这种特殊情况下,我很乐意模拟持久层。给出以下代码段:
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;
}