`

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

阅读更多

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
分享到:
评论

相关推荐

    测试数据管理器2.0

    测试数据的质量直接影响到软件测试的覆盖率和准确性,进而影响整体项目的进度和质量。"测试数据管理器2.0"就是这样一款基于Excel VBA开发的专业工具,旨在帮助测试人员高效、准确地生成和管理测试数据。 测试数据...

    NASA锂电池各种型号电池测试数据

    NASA的锂电池测试数据集是一个宝贵的资源,用于深入理解锂离子电池的性能和寿命。这个数据包包含了一系列不同型号电池的详细测试结果,旨在为研究人员、工程师和电池技术爱好者提供第一手资料,帮助他们分析和估计...

    11款开放中文分词引擎测试数据

    在这个主题中,“11款开放中文分词引擎测试数据”提供了对不同开源分词工具进行性能评估的数据集。这个数据集通常包括各种类型的文本,如新闻、文章、社交媒体内容等,以全面测试分词引擎在不同场景下的准确性和效率...

    灰色误差理论在岩矿测试数据处理中的应用研究 (1).pdf

    在传统数据处理中,往往依赖统计学理论,要求数据量规模大且呈正态分布,但这一方法在实际应用中会遇到数据量不足、分布不规则等问题,从而影响数据处理的准确性和实用性。灰色误差理论的引入,能够有效处理这些不足...

    滑动t检验—附带详细使用说明和测试数据

    需要注意的是,滑动t检验假设数据是独立且同分布的,如果实际数据中存在依赖关系或异方差性,可能需要对数据进行预处理或者选择其他适应性更强的检验方法。 在使用过程中,可以根据需求调整程序的细节,例如改变...

    超线程的碰撞 Intel P4 3.06 GHz CPU测试数据对比.pdf

    测试数据显示,对于某些特定应用,开启超线程(HT)可能会导致性能提升,而在其他情况下,效果可能并不理想。这是因为超线程依赖于处理器的资源调度和任务的并行性。如果一个线程已经完全占据了处理器资源,那么第二...

    数据库结构和对比工具

    有时我们需要确保数据的一致性,尤其是在测试环境和生产环境之间。数据对比工具会检查记录的数量、内容甚至特定字段的值,帮助我们识别并解决数据不一致的问题。例如,Redgate的SQL Data Compare可实现这一点,同时...

    Python基于Hypothesis测试库生成测试数据

    - **自动化测试数据生成**:Hypothesis 能够自动为测试用例生成各种不同的输入数据,包括边界值和异常情况,这对于发现隐藏的缺陷非常有帮助。 - **可定制性强**:用户可以根据需求定义自己的数据生成策略,这意味着...

    分布式大数据函数依赖发现.pdf

    分布式大数据函数依赖发现是数据库分析中的一个重要议题,特别是在当前大数据时代背景下。函数依赖(Functional Dependencies,...对于从事分布式系统开发、数据库管理和数据挖掘的人员来说,是一份重要的参考文献。

    分布式缓存技术-Redis和Memcached选型对比-性能测试

    分布式缓存技术是现代高并发、高性能Web应用中不可或缺的一部分,它们通过将数据存储在内存中,以提高读取速度,降低对数据库的依赖。在众多的缓存解决方案中,Redis和Memcached是最受欢迎的两个选择。本文将深入...

    c++小波 源代码 编译说明 测试数据 经过matlab验证,结果一致

    总的来说,这个压缩包提供了一个完整的C++小波分析实现,包括源代码、编译说明、测试数据和MATLAB验证,对于学习小波理论、C++编程以及信号处理的开发者来说是一份宝贵的资料。通过阅读和运行这些文件,用户不仅可以...

    分布式数据不一致性检测的实现与优化.pdf

    综上所述,分布式数据不一致性检测涉及到分布式系统的基础理论、数据依赖关系、最优化算法以及实验验证等多个方面。理解和掌握这些知识点对于构建可靠、高效的分布式系统至关重要。同时,随着大数据和云计算的发展,...

    QTP脚本数据分离管理

    【QTP脚本数据分离管理】是自动化测试领域中一种高效的方法,用于将测试脚本与测试数据分离开来,以提高脚本的可维护性和复用性。QuickTest Professional(QTP)是HP(现称Micro Focus)推出的一款功能强大的自动化...

    数据脱敏方案生态对比分析.pptx

    IBM Optim是一款专门的测试数据管理(TDM)产品,提供纯软件解决方案,可进行数据脱敏。其特点是具有流程化管理,但不支持实时漂白,需要数据落地,且隐私数据发现功能较为基础,仅支持用户自定义正则表达式,准确率...

    Deepchecks:用于测试和验证机器学习模型和数据的库

    3. **数据分布不匹配**:对比训练集和测试集之间的数据分布,识别潜在的样本偏差问题。 4. **概念漂移**:监控模型随着时间推移是否仍能有效捕捉数据中的变化,防止模型过时。 5. **数据泄漏**:防止在训练和验证...

    激光引信收发视场测试及数据处理.pdf

    通过对激光引信测试数据的深入分析,不仅可以优化设计,提高产品的可靠性,还能为故障诊断提供依据。参考文献和专业指导在这样的研究中起到了支撑作用,它们提供了理论基础和实践经验,帮助研究人员解决实际问题。 ...

    数据驱动测试报告1

    实验要求使用10%,20%和30%的随机样本数据进行训练,并用剩余数据进行测试,目的是对比不同训练样本量对预测效果的影响。实验中,他们评估了多种分类器,包括监督、无监督和半监督算法,如AdaBoostClassifier、CBLOF...

    datasnapshot是JavaScript测试的通用模拟数据管理器

    数据快照(Data Snapshot)是...总的来说,data-snapshot是JavaScript测试中的得力助手,它简化了测试数据的管理和比对,提升了测试的准确性和效率。通过正确地使用和维护数据快照,可以更好地保证软件的质量和稳定性。

    基于Matlab的信号平稳性检验系统.pdf

    系统的设计考虑到了使用者的便利性,实验结果表明,该系统能有效地完成信号平稳性的检验,并对测试数据给出了较好的检验结果。这一成果不仅促进了信号处理领域平稳性检验技术的发展,而且也为相关领域的研究和实际...

    分布式大数据多函数依赖冲突检测.pdf

    在实验部分,作者使用了真实数据集和人工数据集进行了测试,并与集中式检测方法以及基于Hadoop的nae方法进行了对比。实验结果表明,本文提出的多函数依赖冲突检测方法在检测效率上有明显提升,尤其是在数据规模、...

Global site tag (gtag.js) - Google Analytics