TestNG - 与 JUnit


JUnit 和 TestNG 是最流行的 Java 应用程序测试框架。这两个框架都很容易使用。因此,在为您的应用程序选择测试框架时,最好对其中一个或另一个中存在哪些功能有一个高层次的了解,然后根据您的项目需求做出明智的决定。

JUnit 与 TestNG

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

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

特征 联合单元 测试NG 结论

注释

基于注释

基于注释

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

使用方便

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

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

TestNG在易用性方面更胜一筹。

IDE支持

受 Eclipse 和 IntelliJ IDEA 等主要 IDE 支持。

受 Eclipse 和 IntelliJ IDEA 等主要 IDE 支持。

它们都很相似,并且可以轻松地与主要 IDE 集成。

数据提供者

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

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

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

测试套件

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

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

HTML 报告

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

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

TestNG HTML 报告看起来已经过时,但使用起来很简单。如果您必须与其他人共享 HTML 报告,我建议使用 JUnit。

从 Java Main 方法运行

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

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

它们都支持从 java main 方法执行测试用例。

断言

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