我已经开始发现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
mock,Connection
mock,ResultSet
mock等?所以不是测试数据库本身吗?
但是如果我也想测试dao和数据库的行为呢?
你能不能提供一些代码样本,链接,这可能是有帮助的,并显示最好的方法这样做?
5条答案
按热度按时间fnx2tebb1#
这是一个使用Mockito测试UserDAO的良好开端。这段代码使用了大量的Mockito特性,因此您可以了解如何使用它们。如果您有问题,请告诉我。
uxh89sit2#
但是如果我也想测试dao和数据库的行为呢?
如果您确实想测试数据库(这是您应该做的!),那就没有办法了--您需要一个实际的数据库。Mockito虽然是一个很棒的库,但可能是不适合这项工作的工具。
6rqinv9w3#
下面是您 * 应该 * 测试它的方法:
关于上述内容的几点注意事项:
1)测试看起来简短,简单,易于理解,因为 * 他们应该 *;如果它们看起来像另一个答案中的那些又大又丑,那你就犯了根本性的错误。
2)测试代码可以也应该有自己的基础结构帮助器,比如
IntegrationTests
基类,它将隐藏实际测试中任何讨厌的JDBC/ORM访问。我在几个项目中实现了这样的帮助器,所以我知道这是可以做到的,但这将是其他问题的材料。ef1yzkbh4#
像DBUnit这样的工具结合JUnit可以帮助您使用数据库测试DAO。DBUnit可以帮助您在UnitTest之前将测试数据插入到数据库中,并在测试之后将数据库中的数据与您的预期进行比较。
hs1rzwqc5#
这是我的测验应用程序中的一个示例
}