5

I'm just wondering, what is the best way to test JDBC-related methods? Such as adding users, banning users, etc.

(Using JUnit)

Should I set all my void methods to booleans and have them return true if they've worked, false if they didn't, and assert those values accordingly in my JUnit tests?

This is just a general question to find the best practices.

Thank you!

4

4 回答 4

7

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

您不必修改代码以使其与单元测试一起使用,它应该以完全相同的方式在生产和测试中工作。

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

于 2013-06-19T14:18:15.350 回答
2

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

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

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

于 2013-06-19T14:41:41.703 回答
1

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

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

编辑:您还可以查看DB Unit

于 2013-06-19T14:19:57.750 回答
1

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

于 2013-06-19T14:17:56.450 回答