TestNG - VS JUnit

  • 简述

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

    JUnit 当前版本是 5.7.1,它仍在不断发展并致力于包含更多功能。TestNG当前版本是7.4.0,已经成熟,功能丰富。
    下表在不同功能上比较了 JUnit 与 TestNG。该表不包括这两个框架中都存在的非常具体或常见的功能,例如测试异常、超时设置、生命周期回调方法等。
    特征 JUnit TestNG 结论
    Annotations
    基于注解
    基于注解
    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 的轻松集成。
    Data Provider
    支持多种方式提供测试数据,如方法、Enum、CSV、CSV Files等。
    支持数据提供者方法和来自测试套件 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 main 方法运行测试。
    我们可以使用 TestNG run() 方法从 java main 方法执行测试。
    它们都支持从 java main 方法执行测试用例。
    Assertions
    JUnit 提供了足够的断言方法来比较预期和实际测试结果。
    TestNG 提供了足够的断言方法来比较预期和实际测试结果。
    它们在断言支持方面是相似的。
    Assumptions
    JUnit 支持基于特定条件跳过测试的假设。
    TestNG 不支持假设。
    如果您想根据条件跳过测试,JUnit 会更好。
    Test Order
    Junit 不支持测试订单。
    TestNG 支持根据优先级属性对测试方法进行排序的测试顺序。
    当您想按特定顺序执行测试时,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 侦听器支持要好得多。