TestNG 相对于 JUnit 的优势
JUnit 和 TestNG 是 Java 应用程序最流行的测试框架。这两个框架都易于使用。因此,在为您的应用程序选择测试框架时,最好对其中一个或另一个中存在哪些功能有一个总体了解,然后根据您的项目需求做出明智的决定。
在本文中,我们将比较和对比 TestNG 和 JUnit 的不同功能。
JUnit 与 TestNG
下表比较了 JUnit 与 TestNG 的不同功能。该表不包括这两个框架中存在的非常具体或常见的功能,例如测试异常、超时设置、生命周期回调方法等。
功能 |
JUnit |
TestNG |
结论 |
---|---|---|---|
注释 |
基于注释 |
注释基于 |
JUnit 5 和 TestNG 都是基于注释的。它们的性质和行为相似。 |
易于使用 |
JUnit 5 内置于各种模块中;您需要 JUnit Platform 和 JUnit Jupiter 来编写测试用例。 如果您想要更多功能(例如参数化测试),则需要添加 junit−jupiter−params 模块。 |
单个模块即可获得所有 TestNG 功能。 |
TestNG 在易用性方面更胜一筹。 |
IDE 支持 |
在 Eclipse 和 IntelliJ IDEA 等主流 IDE 上均受支持。 |
在 Eclipse 和 IntelliJ 等主流 IDE 上均受支持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 Main 方法运行 |
我们可以使用 JUnit 5 启动器 API 从 java main 方法运行测试。 |
我们可以使用 TestNG run() 方法从 java main 方法执行测试。 |
它们都支持从 Java main 方法执行测试用例。 |
断言 |
JUnit 提供了足够的断言方法来比较预期和实际测试结果。 |
TestNG 提供了足够的断言方法来比较预期和实际测试结果。 |
两者在断言支持方面相似。 |
假设 |
JUnit 支持假设,以根据某些条件跳过测试。 |
TestNG 不支持假设。 |
如果您想根据条件跳过测试,JUnit 会更好。 |
测试顺序 |
Junit 不支持测试顺序。 |
TestNG 支持测试顺序,可根据优先级属性对测试方法进行排序。 |
如果您想按特定顺序执行测试,TestNG 会更好。 |
禁用测试 |
JUnit 支持多种禁用和启用方式測試。例如,基于 OS、JRE、系统属性。 |
TestNG 支持禁用测试,但功能有限。 |
当您想要根据条件禁用或启用测试时,JUnit 更适合。 |
并行执行 |
JUnit 5 尚不支持并行执行。 |
如果通过 XML 套件运行,TestNG 支持并行执行。 |
截至目前,TestNG 更适合并行执行,JUnit 5 开发正在进行中来支持此功能。 |
侦听器 |
JUnit 通过 Launcher API 支持侦听器,没有使用注释添加侦听器的机制。 |
TestNG 支持各种类型的侦听器,可以使用注释添加。 |
与 JUnit 5 相比,TestNG 侦听器支持要好得多。 |
结论
JUnit 仍在不断发展,并致力于包含更多功能。相比之下,TestNG 已经成熟且功能丰富。