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 侦听器支持要好得多。