【发布时间】:2015-04-07 22:04:08
【问题描述】:
我已经开始发现 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 模拟、ResultSet 模拟等吗?所以不测试数据库本身?
但是如果我还想测试 dao 和 database 的行为呢?
您能否提供一些可能有用的代码示例、链接并展示最佳方法?
【问题讨论】:
-
一个合适的 DAO 不应该管理事务,即没有提交或回滚。通常,事务划分是在较高层完成的,并且通常(Java EE、Spring 等)是隐式应用的。
标签: java unit-testing junit mockito dao