dbunit mysql bug no_基于DataModule和DbUnit,使用Unitils进行DAO层的单元测试

按照Kent

Back的观点,单元测试最重要的特性之一应该是可重复性。不可重复的单元测试不是说没有价值,但价值仅限于程序员自测代码功能,而不能用于持续集成。因此好的单元测试应该具备独立性和可重复性,对于业务逻辑层,可以通过mock底层对象,上层对象来获得这种独立性和可重复性。而DAO层因为是和数据库打交道进行CRUD操作的层,DAO层的单元测试的依赖于数据库中的数据,要实现DAO层的单元测试的可重复性就需要对于每次单元测试执行时数据库的数据都是符合要求的,但同时又不应该破坏其他数据。要保证这一点,就需要启动每轮单元测试时都能提供同样的数据,而在推出单元测试时,凡事破坏了原来数据库状态的(增,删,改)要在推出单元测试时将数据库恢复到原来的状态。

数据层的单元测试框架DbUnit等就是做这个事情的,更随着Unitils的出现,将SpringModule,DatabaseModule,DbUnitModule等整合在一起,使得DAO层的单元测试变得非常容易。

下面就以一个DAO的实现类为例介绍基于DbUnit使用Unitils作为测试框架,mysql作为测试数据库的详细过程,并对其过程中出现的各种问题给出解决方案。

具体环境:

DbUnit,2.4.8

Unitils: 2.4

Pom.xml中的dependency如下:

org.unitils

unitils

2.4

test

org.easymock

easymock

3.0

test

org.dbunit

dbunit

2.4.8

test

数据中已经建立User表,

CREATE TABLE USER

(

ID INT(11) NOT NULL

AUTO_INCREMENT PRIMARY KEY,

NAME VARCHAR(50) NOT

NULL DEFAULT '',

GENDER VARCHAR(50) NOT

NULL DEFAULT ''

)

对应Annotation实体类为:

a4c26d1e5885305701be709a3d33442f.png

UserDAOImpl如下:

@Repository("userDAO")

public class

UserDAOImpl implements UserDAO {

@Autowired

private

SessionFactory sessionFactory;

@Transactional

public

List getAl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值