测试数据依赖数据和测试数据不依赖数据的对比性

Junit 我想大家在做项目的时候都会用到,这也开发中必要的过程,Junit 的好处很多,在这里就不罗嗦了

下面介绍一下写一个测试用例的步骤

      1.准备测试数据

      2.执行测试结果

      3.断言

1.现在准备测试数据的方式:

    1. 测试数据不依赖数据库

    2. 测试数据依赖数据库

2. 测试数据不依赖数据的好处:

    首先要硬编码初始化一些测试数据,例如有个Studeng 对象

    建立一个UnitTestDataFactory类,提供创建各种实体数据的方法。比如createStudent(id, name),      createTeacher(...)
 然后每个单元测试需要准备数据时,就调用
UnitTestDataFactory.createXxx(...)
UnitTestDataFactory.createYyy(...)

abcService.action().


assert(...)


UnitTestDataFactory.cleanTestData().  

只要把UnitTestDataFactory 写好,测试类直接继承UnitTestDataFactory

 

3. 测试数据不依赖数据的坏处:

这些 createXxx, createYyy, 仍然是重复的,你的每个单元开始前都得调用这么一大堆,如果关系复杂,这种麻烦会呈指数级上升。

尤其是有时候测试涉及十几个表的基础数据,上百条记录时,你一个个去建这些会耗费大量的时间。

 

1.测试数据依赖数据库

 用一组SQL脚本建立一个测试专用的数据库,所有的表都可能有几十甚至上百条各种各样的数据。
 测试时,直接使用这些数据即可,测试完成后,清除测试产生的垃圾数据。

 这样做的坏处就是当你从MYSQL移植到Oracle时,你需要重写所有测试用的SQL脚本。
 但我想这种移植并不是经常需要的,可以忍受。

 

SQL脚本一般是不需要改动的。只有你新增测试时,发现你测试需要的某种数据在已有的脚本里没有,你修改脚本,增加测试,并修复因为你修改脚本而破坏的其他测试。
 举个例子。
 student.sql 负责建立100条 student数据,这个脚本每次运行所有单元测试时会被执行一次。
 你新增测试,需要用到学号大于20000的student, 而现有的测试数据里没有,于是你修改student.sql,加一条学号大于20000的 student. 然后就可以写你的测试了。
 同时,之前已经存在的测试里,可能会有如下情况:
 testFindStudents() {
  List students = studentDAO.findAll().
  Assert.equals(100, students.size());
}
 这个测试之前是一直通过的,直到你修改了student.sql脚本。
 所以你提交你的测试前,还得修复这个测试,将其改为
   Assert.equals(101, students.size());

 

  删除一个Student 也会有类似的问题
 

 尤其是你的单元测试本身修改了数据,你的单元测试本身就得负责将数据还原成脚本里的样子。
 比如你删除了一条数据,在单元测试完成前,还得把这条数据加回来。
 testDelete() {
   Student s = studentDAO.get(1).
   studentDAO.delete(s);
   Assert.isNull(studentDAO.get(1);

   // 手动恢复测试数据
   Student s1 = new Student();
   s1.setId(...);
   ...
   studentDAO.create(s1);
 
}
 其中手动恢复数据的过程可以借助Spring基类的自动回滚事务来完成。
 只有回滚事务无法恢复数据时,才需要手动恢复。

 

 呵呵,两种方式各有千秋,我也都在使用,我觉等,如果项目一般,表的结构不太复杂,我觉得还是不依赖数据库,

如果项目很庞大,表关系相当复杂就要采用建立测试数据比较好。

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值