首页 文章

在JUnit中测试JDBC查询[关闭]

提问于
浏览
5

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

(使用JUnit)

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

这只是找到最佳实践的一般问题 .

谢谢!

4 回答

  • 1

    我个人发现一个很棒的工具是Mockito . 您可以模拟JDBC返回给您的内容,以便您可以说给定特定的查询和参数,您将获得特定的值 .

    您不必修改代码以使其适用于单元测试,它应该在 生产环境 和测试中以完全相同的方式工作 .

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

  • 7

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

  • 2

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

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

    编辑:你也可以看DB Unit

  • 1

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

    无论是单元测试还是集成测试,我都不知道 . 但它们是 important ,所以我更喜欢将它们内置到持续集成循环中 .

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

相关问题