论坛首页 Java企业应用论坛

倒底该怎么写DAO的单元测试?

浏览 19428 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2007-05-21  
wuhua 写道
想怎么写就怎么写吧,
能做到没有软件没有bug就行
每个人的习惯不同,有些人喜欢mock,有的人喜欢准备一个简单的数据库(java内存数据库)有的人喜欢。。。。
而我比较喜欢真正的写到数据库里面

只要保证每人一个数据库就行
0 请登录后投票
   发表时间:2007-05-21  
wuhua 写道
想怎么写就怎么写吧,
能做到没有软件没有bug就行
每个人的习惯不同,有些人喜欢mock,有的人喜欢准备一个简单的数据库(java内存数据库)有的人喜欢。。。。
而我比较喜欢真正的写到数据库里面

真的可能么。。。。
0 请登录后投票
   发表时间:2007-05-21  
dbunit貌似有个问题,导致比较的难用,比如 有些实体 是自关联的,那么dbunit就无法在tearDown的时候删除数据,因为它无法发现依赖的方向
0 请登录后投票
   发表时间:2007-05-22  
dengyin2000 写道
结合dbunit 和  spring的那个测试基类。  dbunit为你准备好数据。 数据是定义在xml文件中的


如果是多表的,或者有些数据库特性的!
比如sequence!!!这个就不好用了吧!
0 请登录后投票
   发表时间:2007-05-22  
xly_971223 写道
wuhua 写道
想怎么写就怎么写吧,
能做到没有软件没有bug就行
每个人的习惯不同,有些人喜欢mock,有的人喜欢准备一个简单的数据库(java内存数据库)有的人喜欢。。。。
而我比较喜欢真正的写到数据库里面

只要保证每人一个数据库就行


这个会产生问题的,你这次能测试通过的!下次就可能通不过了!!!不适合做自动批量测试
0 请登录后投票
   发表时间:2007-05-22  
xly_971223 写道
困惑多一: 
新增一个用户后,需要调用一个方法getUserInfo来判断数据是否已经插入!!!

UserDao.createUser(user);
assertNotNull(user.getId());

这样就行了 为什么要用getUserInfo()


用要是用hibernate这样就可以了!!!
如果我插入一条数据,并没有返回id呢?
0 请登录后投票
   发表时间:2007-05-22  
klyuan 写道
xly_971223 写道
困惑多一: 
新增一个用户后,需要调用一个方法getUserInfo来判断数据是否已经插入!!!

UserDao.createUser(user);
assertNotNull(user.getId());

这样就行了 为什么要用getUserInfo()


用要是用hibernate这样就可以了!!!
如果我插入一条数据,并没有返回id呢?

如果没有返回值 测试起来可能要复杂了 只能通过计算总条数了
个人认为要测试Dao 必须每人一个数据库 这是前提 有了这个前提测试就方便了 因为数据库里有什么数据自己都知道
但是必须要保持数据库每次初始化时的数据都是一致的
0 请登录后投票
   发表时间:2007-05-22  
不写!!
0 请登录后投票
   发表时间:2007-07-10  
xly_971223 写道
klyuan 写道
xly_971223 写道
困惑多一: 
新增一个用户后,需要调用一个方法getUserInfo来判断数据是否已经插入!!!

UserDao.createUser(user);
assertNotNull(user.getId());

这样就行了 为什么要用getUserInfo()


用要是用hibernate这样就可以了!!!
如果我插入一条数据,并没有返回id呢?

如果没有返回值 测试起来可能要复杂了 只能通过计算总条数了
个人认为要测试Dao 必须每人一个数据库 这是前提 有了这个前提测试就方便了 因为数据库里有什么数据自己都知道
但是必须要保持数据库每次初始化时的数据都是一致的



如果每个人都自己的数据库,知道自己的需要的数据,那怎么做构建时的自动测试。

UserDao.createUser(user);
assertNotNull(user.getId());

用的是基于状态测试,当然需要对最终状态进行测试,所以getUserInfo()是有必要,如果说怕getUserInfo有问题,说明你需要考虑一下你的代码是否可测试

0 请登录后投票
   发表时间:2007-07-10  
一个test方法测试整个dao的crud.
最好能有专门的测试数据库
没有的话,
就从create一条纪录开始,retrieve出来assert刚刚插入的数据,
再讲retrieve出的数据update到数据库。再retrieve出来assert刚刚update的数据,最后delete。在去retrieve,看看是不是0条。
这样保证了数据的完成性。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics