用于在Java中测试Service/DAO层的工具和方法

And*_*ite 5 java testing integration-testing automated-tests

我试图找出测试服务和DAO层的最佳方法.那么,一些子问题......

  1. 在测试服务层时,最好是针对模拟DAO层或指向测试环境的"实时"DAO层进行测试吗?
  2. 当唯一的测试数据库在共享环境中时,如何测试DAO层中的SQL(Oracle/DB2)
  3. 你如何解决任何DAO写/更新的悖论需要使用DAO读取进行测试,这也需要进行测试?

我在这个领域寻找任何好的文档,文章或参考文献以及任何有助于自动化过程的工具.我已经了解了JUint的单元测试和Hudson的CI.

Aug*_*sto 4

获取不断增长的面向对象软件,以测试为指导。它提供了一些关于如何测试数据库访问的重要提示。

就我个人而言,我通常将 DAO 测试分为 2 部分:使用模拟数据库的单元测试来测试 DAO 上的功能,以及集成测试来测试针对 DB 的查询。如果您的 DAO 只有数据库访问代码,则不需要单元测试。

我从书中提出的建议之一是(集成)测试必须将更改提交到数据库。在使用休眠并发现测试被标记为回滚并且数据库从未获得插入语句之后,我学会了这样做。如果您使用触发器或任何类型的验证(甚至 FK),我认为这是必须的。

另一件事,远离 dbunit,它是一个很好的框架,可以开始工作,但是当项目变得非常小时,它就变得地狱般的了。我在这里的偏好是使用一组测试数据生成器类来创建数据,并将其插入到测试设置或测试本身中。

并检查 dbmigrate,它不是用于测试,但它将帮助您管理用于升级和降级数据库架构的脚本。

在共享数据库服务器的情况下,我为每个环境创建一个架构/用户。由于每个开发人员都有自己的“本地”环境,因此他也拥有一种模式。