Testng 简明教程
TestNG - vs JUnit
JUnit 和 TestNG 是最流行的用于 Java 应用程序的测试框架。这两个框架都易于使用。因此在为你的应用程序选择测试框架时,最好对一个或另一个中存在的特性有一个高级别的了解,然后根据你的项目需求做出明智的决策。
JUnit vs TestNG
JUnit 当前版本为 5.7.1,它仍在不断发展和改进,以便包含更多特性。TestNG 当前版本为 7.4.0,它成熟且具有丰富的特性。
下表在不同的特性方面对 JUnit 和 TestNG 进行了比较。该表排除了这两个框架中存在的非常具体或常见的特性,例如测试异常、超时设置、生命周期回调方法等。
Feature |
JUnit |
TestNG |
Conclusion |
Annotations |
Annotations Based |
Annotations Based |
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 相似,并为主要的 IDE 提供了轻松的集成。 |
Data Provider |
支持多种方式来提供测试数据,例如方法、枚举、CSV、CSV 文件等。 |
支持数据提供程序方法和来自测试套件 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 主方法执行测试。 |
我们可以使用 TestNG run() 方法从 Java 主方法执行测试。 |
这两个方法都支持从 Java 主方法执行测试用例。 |
Assertions |
JUnit 提供了足够的断言方法来比较预期和实际的测试结果。 |
TestNG 提供了足够的断言方法来比较预期和实际的测试结果。 |
两者在断言支持方面相似。 |
Assumptions |
JUnit 支持基于特定条件跳过测试的假设。 |
TestNG doesn’t support assumptions. |
如果你想基于条件跳过测试,JUnit 更好。 |
Test Order |
Junit 不支持测试顺序。 |
TestNG 支持使用 priority 属性按优先级对测试方法进行排序的测试顺序。 |
当你希望以特定顺序执行测试时,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 侦听器支持要好得多。 |