欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java三代单元测试工具的比较 单元测试Java软件测试junit脚本 

程序员文章站 2024-02-16 00:01:22
...
第一代:JUnit :
优点:1.开源
2.测试后代码的质量提高明显
3.JUnit是Java写的
4.开发者写出测试代码。它证明代码需要做什么。如果有Bug会报错。
缺点:1。完全手动工作
2.为达到覆盖率,每100行代码写200-400行的测试代码
3.需要写很多的setup()、 shutdown()方法
4.测试代码难以维护,代码改变后,测试代码就无用了。
5.测试的覆盖率很难上去,测试只是静态的,线型的,只能测试有限的Path
第二代基于生成JUnit 测试脚本的: JTest.
优点:1.出来5年了,很多IDE支持。
2.产生的测试代码(JUnit)近似开发者手写的。
3.自动产生测试代码,减少了写JUnit测试代码的时间。
4.静态的代码分析。
缺点:1。证明了代码做了什么,而不是保证了“需要做什么”给人安全的错觉。
Example:
? Method to add 2 numbers together
? Developer mistakenly write code: A+B=A
? Script generator will write tests to validate that:
1+1=1, 4+6=4,10+20=10
? When tests run, they will all pass!
? Only perfect code will generate valid tests

2.开发者必需手动复查数以千行的JUnit代码。看正确与否。
3.复查机器产生的代码是很痛苦的。
4.很多重复的JUnit代码,到处都有。
5.报告的信息过多,不正确的测试将无法获取Bug。
6.它使用了私有的库,而不是纯的JUnit。
7.几乎不支持迭代/敏捷的开发模型。
(1) 同步/再生问题使它们没有办法使用。
(2)手动维护的话,失去了原有的自动化的意义。
8.要写许多的注释、说明在代码中。
9.静态的技术已经不能满足Java了。
(1)传统的静态的数据流分析只适合结构化的编码。
(2)对简单静态的代码有用,对JAVA复杂的代码用处不大。
(3)interface, abstract, private的类、方法都不可测。
10.不可动态生成测试用例的弊端:
If(date day=SystemDate.day)and
(date month=SystemDate.month) then
return true;
else return false;
像这样,今天是 return true 明天就是false;
11. 特殊用法:(1)生成的脚本是通过一个生产框架来完成的。
(2)生成的脚本只能最小的覆盖率。
(3)要提高覆盖率要用手动.
(4)脚本的维护是手工而且很容易变得陈旧。失去自动化的意义
第三代:全新的自动化单元测试:Agitar Software
Agitator的优点:
1. 完全不用写和维护测试脚本。
2.完全的面向对象的测试。
3.保证了代码“需要做什么”
4.把代码运行的真实情况(行为)直接反馈给开发者。
5.能有效地动态地生成数据(测试用例),对JAVA进行动态分析。
6.Agitation(数据分析,静态分析,动态分析)。
7.Observation暴露代码运行情况,simple click断言就生成了。
8.Factoies:200个不同的factory类型来规范输入,匹配逻辑。
9.Pattion: 规范输出,使逻辑更清晰。
10.Snapshort, stacktarce,跟踪代码,查找BUG,更容易。
11.自动创建智能MOCK对象,提供尽可能的代码
12.测试配置以XML格式保存,耐用,易改变,最有效的测试资产。
Dashboard的优点:
1. 标准和HTML表现形式,易于广泛访问和存取。
2. 清楚地看出软件的健康和测试努力的状态。
3. 项目汇总——复杂度,使用情况,风险情况、测试质量,覆盖率。测试点通过/失败的状态。
4. 所有权的分配,每个人,每个问题的负责划分非常清楚。
5. 分等级视图,提供包、类的细节信息,只要一,一目了然。