以下是对 两个测试框架的详细对比。其中要特别说明的是,在很多资料上说JUnit4 不支持参数化测试,这种说法我认为是不准确的,JUnit4支持参数化测试,只是在一个测试用例中,只能有一个标记了@Parameters注释的方法对参数进行批量设置。所以Junit4 只能给每个 不同的参数组编写一个测试用例
TESTNG&&JUNIT4 对比
特性或指标 | TESTNG | JUINT4 |
1. 测试是否支持 (Annotations) | YES | YES |
2.框架依赖程度 | 不需要扩展特定的基类和实现特定的方法 | 不需要扩展特定的基类和实现特定的方法 |
3.灵活性 | 同样支持 Before,After方法, TestNG更为灵活,支持各种签名方式, 如 private,protected 同样也支持 BeforeClass 和 AfterClass,只执行一次的方法,但是可以不需要使用 static签名 | 支持 Before,After方法 支持 BeforeClass 和 AfterClass |
4.依赖性测试 | 利用 Test 注释的 dependsOnMethods 属性来应对测试的依赖性问题。有了这个便利的特性,就可以轻松指定依赖方法。 | 难确定测试用例执行的顺序 |
5.失败和重运行 | 一旦 TestNG 中出现失败,它就会创建一个 XML 配置文件,对失败的测试加以说明。如果利用这个文件执行 TestNG 运行程序, TestNG 就只 运行失败的测试。这样可以快速定位出错方法,并且节约大量的时间。 失败文件,一般命名为 testng-failed.xml,以后只需要运行此文件就可以了。 | 如果测试套件包括 N 项测试,其中 M(M<=N) 项失败,很可能就会迫使您重新运行整个测试套件(修改错误以后)。这样的工作会耗费掉大量的时间。 |
6.参数化测试 | TestNG 提供了开箱即用的类似特性。通过在 TestNG 的 XML 配置文件中放入参数化数据,就可以对不同的数据集重用同一个测试用例,甚至有可能会得到不同的结果。 支持 @DataProvider 注释可以方便地把复杂参数类型映射到某个测试方法。 | 如果您想改变某个受测方法的参数组,就只能给每个 不同的参数组编写一个测试用例。多数情况下,这不会带来太多麻烦。出现大量的重复测试代码。 |
7. 测试分组 | 支持 | 不支持 |
8. 多线程测试 | TestNG对多线程测试的支持良好,只需要配置即可。 | JUnit中要想进行多线程测试比较麻烦,需要其它模块。 |
设计 JUnit 的目的是侧重点分析代码单元,而 TestNG 的预期用途则针对高级测试。