TestNG - 对比 JUnit



JUnit 和 TestNG 是 Java 应用程序中最流行的测试框架。这两个框架都易于使用。因此,当需要为您的应用程序选择测试框架时,最好对其中一个或另一个框架具有的功能有一个高级概念,然后根据您的项目需求做出明智的决定。

JUnit 与 TestNG

JUnit 当前版本为 5.7.1,它仍在不断发展,并致力于包含更多功能。TestNG 当前版本为 7.4.0,它已经成熟并且功能丰富。

下表比较了 JUnit 和 TestNG 在不同功能上的差异。该表不包括这两个框架中都存在的非常具体或常见的功能,例如测试异常、超时设置、生命周期回调方法等。

功能 JUnit TestNG 结论

注解

基于注解

基于注解

JUnit 5 和 TestNG 都是基于注解的。它们在本质和行为上都很相似。

易用性

JUnit 5 内置于各种模块中,您需要 JUnit Platform 和 JUnit Jupiter 来编写测试用例。如果您需要更多功能,例如参数化测试,则需要添加 junit-jupiter-params 模块。

单个模块即可获取所有 TestNG 功能。

在易用性方面,TestNG 更好。

IDE 支持

支持主要的 IDE,例如 Eclipse 和 IntelliJ IDEA。

支持主要的 IDE,例如 Eclipse 和 IntelliJ IDEA。

两者都相似,并提供与主要 IDE 的轻松集成。

数据提供者

支持多种提供测试数据的方式,例如方法、枚举、CSV、CSV 文件等。

支持数据提供者方法和来自测试套件 xml 文件的数据。

JUnit 更适合注入测试方法的输入数据

测试套件

在 JUnit 中,测试套件使用 @RunWith 和 @Suite 注解运行。

TestNG 使用 XML 文件来运行套件测试。

HTML 报告

JUnit 需要外部插件 maven-surefire-report-plugin 生成 HTML 报告。

TestNG 自动为测试运行创建 HTML 报告。

TestNG HTML 报告看起来有点过时,但使用简单。如果您需要与其他人共享 HTML 报告,我建议您使用 JUnit。

从 Java 主方法运行

我们可以使用 JUnit 5 启动器 API 从 Java 主方法运行测试。

我们可以使用 TestNG run() 方法从 Java 主方法执行测试。

两者都支持从 Java 主方法执行测试用例。

断言

JUnit 提供了足够的断言方法来比较预期和实际的测试结果。

TestNG 提供了足够的断言方法来比较预期和实际的测试结果。

两者在断言支持方面都很相似。

假设

JUnit 支持假设,以便根据某些条件跳过测试。

TestNG 不支持假设。

如果您想根据条件跳过测试,JUnit 更好。

测试顺序

Junit 不支持测试顺序。

TestNG 支持测试顺序,以便根据优先级属性对测试方法进行排序。

当您想要按特定顺序执行测试时,TestNG 更好。

禁用测试

JUnit 支持多种禁用和启用测试的方法。例如,基于操作系统、JRE、系统属性。

TestNG 支持禁用测试,但功能有限。

当您想根据条件禁用或启用测试时,JUnit 更好。

并行执行

JUnit 5 尚未支持并行执行。

如果通过 XML 套件运行,TestNG 支持并行执行。

目前,TestNG 更适合并行执行,JUnit 5 正在开发中以支持此功能。

监听器

JUnit 通过 Launcher API 支持监听器,没有使用注解添加监听器的机制。

TestNG 支持各种类型的监听器,并且可以使用注解添加。

与 JUnit 5 相比,TestNG 监听器支持要好得多。

广告