JUnit 与 TestNG
JUnit 当前版本是 5.7.1,它仍在不断发展并致力于包含更多功能。TestNG当前版本是7.4.0,已经成熟,功能丰富。
下表在不同功能上比较了 JUnit 与 TestNG。该表不包括这两个框架中都存在的非常具体或常见的功能,例如测试异常、超时设置、生命周期回调方法等。
特征 |
JUnit |
TestNG |
结论 |
Annotations
|
基于注解
|
基于注解
|
JUnit 5 和 TestNG 都是基于注解的。它们在性质和行为上相似。
|
Ease of Use
|
JUnit 5 内置于各种模块中,您需要 JUnit Platform 和 JUnit Jupiter 来编写测试用例。如果你想要更多的特性,比如参数化测试,那么你需要添加 junit-jupiter-params 模块。
|
获取所有 TestNG 功能的单个模块。
|
TestNG在易用性方面更好。
|
IDE Support
|
受主要 IDE 支持,例如 Eclipse 和 IntelliJ IDEA。
|
受主要 IDE 支持,例如 Eclipse 和 IntelliJ IDEA。
|
它们都很相似,并提供了与主要 IDE 的轻松集成。
|
Data Provider
|
支持多种方式提供测试数据,如方法、Enum、CSV、CSV Files等。
|
支持数据提供者方法和来自测试套件 xml 文件。
|
JUnit 更适合注入测试方法输入数据
|
Test Suite
|
在 JUnit 中,测试套件使用 @RunWith 和 @Suite 注解运行。
|
TestNG 使用 XML 文件来运行套件测试。
|
|
HTML Reports
|
JUnit 需要外部插件 maven-surefire-report-plugin 来生成 HTML 报告。
|
TestNG 自动为测试运行创建 HTML 报告。
|
TestNG HTML 报告看起来已经过时,但使用起来很简单。如果您必须与他人共享 HTML 报告,我建议您使用 JUnit。
|
Running from Java Main Method
|
我们可以使用 JUnit 5 启动器 API 从 java main 方法运行测试。
|
我们可以使用 TestNG run() 方法从 java main 方法执行测试。
|
它们都支持从 java main 方法执行测试用例。
|
Assertions
|
JUnit 提供了足够的断言方法来比较预期和实际测试结果。
|
TestNG 提供了足够的断言方法来比较预期和实际测试结果。
|
它们在断言支持方面是相似的。
|
Assumptions
|
JUnit 支持基于特定条件跳过测试的假设。
|
TestNG 不支持假设。
|
如果您想根据条件跳过测试,JUnit 会更好。
|
Test Order
|
Junit 不支持测试订单。
|
TestNG 支持根据优先级属性对测试方法进行排序的测试顺序。
|
当您想按特定顺序执行测试时,TestNG 会更好。
|
Disable Tests
|
JUnit 支持多种禁用和启用测试的方法。例如,基于 OS、JRE、系统属性。
|
TestNG 支持禁用测试,但功能有限。
|
当您想根据条件禁用或启用测试时,JUnit 会更好。
|
Parallel Execution
|
JUnit 5 尚不支持并行执行。
|
如果通过 XML 套件运行,TestNG 支持并行执行。
|
目前,TestNG 更适合并行执行,JUnit 5 开发将继续支持此功能。
|
Listeners
|
JUnit 通过 Launcher API 支持侦听器,没有使用注解添加侦听器的机制。
|
TestNG 支持各种类型的侦听器,并且可以使用注解添加。
|
与 JUnit 5 相比,TestNG 侦听器支持要好得多。
|