1、Dao单元测试的问题
Dao层主要工作是数据库访问,是非常重要的模块。为了保证SQL的正确执行,单元测试是必须的。但是一直以来Dao层的单元测试很难进行,主要因为几个问题
1)单元测试必须是执行隔离的环境代码,而隔离数据库非常困难,不得不放弃这个念头。所以Dao层需要和数据库直接打交道,但是单元测试要求每次重复的动作结果都是一致,但是由于外部数据库环境的问题,测试环境无法稳定。
2)现阶段的Dao层一般都会利用Spring的容器组装Dao对象,在辅以一些Support对象。这样的结果就是没有Spring容器,无法测试Dao。
3)每个测试之前,数据库必须处于一个稳定的已知的状态,这就需要数据准备,而单元测试的数据如果要手工插入到数据库中,工作量过大。
4)测试用例必须有断言,我们需要通过断言来判断数据是否插入数据,每个字段是否相同,这个如果没有辅助工具,而手工去一个个断言,工作量不能接受的
2、解决方案
为了解决以上问题,我们选择了Unitils来集成Spring、Dbunit等,完成Dao层的单元测试工作,并和Maven工程结合完成配置。
Unitils的使用很简单,以下面的一个例子来说明。
Dao的代码很简单,是查询、更新一个用户的账户信息
Java代码
public class AccountDao extends JdbcDaoSupport { public Account getAccount(String accountId) { list = getJdbcTemplate().query("select account_id,balance from tb_account where account_id=?", @Override public int updateAccount(String accountId, int balance) { |
1)Maven的POM文件修改
在Dao工程中的POM文件加入如下
Java代码
<dependency> <groupId>org.unitils</groupId> <artifactId>unitils-dbunit</artifactId> <version>${unitils.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.unitils</groupId> <artifactId>unitils-spring</artifactId> <version>${unitils.version}</version> <scope>test</scope> </dependency> |
unitils.version目前最新的为3.3版本