Java三代单元测试工具的比较[转贴]

第一代: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. 分等级视图,提供包、类的细节信息,只要一,一目了然。

Junit与Jtest在网上能搜索到大量的资料
Agitar产品可以上其网站了解更多详www.agitar.com 或www.madetek.com有相关的中文信息。

乱说的!不代表国内大部分公司!

前面的两点写得不错,关于agitator就只提到优点没有提到缺点。