在JUnit中测试JDBC查询

时间:2013-06-19 14:14:39

标签: java testing jdbc junit

我只是想知道,测试JDBC相关方法的最佳方法是什么?如添加用户,禁止用户等。

(使用JUnit)

我应该将我的所有void方法设置为布尔值,并且如果它们有效则返回true,否则返回false,并在JUnit测试中相应地断言这些值?

这只是找到最佳做法的一般性问题。

谢谢!

4 个答案:

答案 0 :(得分:7)

我个人觉得这是一个很棒的工具Mockito。你可以模拟JDBC返回给你的内容,这样你可以说给定一个特定的查询和参数,你会得到一个特定的值。

您不必修改代码以使其适用于单元测试,它应该在生产和测试中完全相同。

您还可以考虑使用内存数据库(如Derby)并在测试阶段开始时加载值,以便了解其中存在的值。尽管在执行时间方面,模拟可能会更快。

答案 1 :(得分:2)

当我编写这样的测试时,我会附加到我将要运行的实际数据库(而不是内存数据库)。我的大部分代码都使用Derby等不一定支持的存储过程或其他特定于数据库的功能。

这些是单元测试还是集成测试,我不知道。但它们重要,所以我更喜欢将它们内置到持续集成周期中。

如果你确实使用了持久性数据库,那么你需要担心一些额外的事情。在测试运行之前,您需要知道数据的状态,并且在每次测试运行时,您应该尽一切可能将其重新置于已知状态。如果你不这样做,你的测试将不会彼此独立,你将开始在套件中找到测试,由于早期测试中的失败而开始失败。

答案 2 :(得分:1)

在单元测试中访问数据库通常不是一个好主意。我认为最好是模拟数据库连接并检查是否调用了正确的查询。原因不包括数据库发生变化且查询不再起作用的情况,但这种情况通常很少发生。

答案 3 :(得分:1)

我认为非常简单的CRUD方法不需要通过单元测试进行测试。只需运行该方法,然后检查表。 最复杂的测试将涵盖基本的CRUD操作。

但是,我已经阅读了代码,其中在一个方法(如集成测试)中测试了创建/查找操作。然后将find的结果与创建请求进行比较。

编辑:您还可以查看DB Unit