分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击人工智能教程
写作本文时,JUnit 当前的版本是 5.2.0,并且它仍然在不断的更新迭代、致力于囊括更多的特质。TestNG 当前的版本是 6.14.3,并且它变得愈来愈成熟,拥有优秀功能也在增加。
特点 | JUnit 5 | TestNG | 总结 | 链接 |
---|---|---|---|---|
注解 | 支持注解 | 支持注解 | 两者都基于注解,并且本质和用法都相似 | JUnit 注解,TestNG 注解 |
易用性 | JUnit 5 嵌入了多种模块,你需要通过JUnit Platform 和 JUnit Jupiter 来编写测试用例 | 单一模块是TestNG 的特点 | TestNG 更易用 | JUnit Maven 依赖,TestNG Maven 依赖 |
IDE 支持 | 被 Eclipse 和 IntelliJ IDEA 等主流 IDE 支持 | 被 Eclipse 和 IntelliJ IDEA 等主流 IDE 支持 | 两者都被主流 IDE 所支持 | JUnit Tests Eclipse, Eclipse TestNG 插件 |
数据提供方式 | 支持多种测试数据提供方式,例如方法、枚举、CSV 数据、CSV文件等 | 仅支持 provider 方法和testng xml 文件方式 | JUnit 在注入测试数据方面做得更好 | JUnit 参数化测试, TestNG DataProvider 方法, TestNG 参数注入 |
测试套件 | JUnit 5 仍然不支持测试套件,至本文发布时仍然在开发过程中 | TestNG 可以将多个测试用例作为测试套件一起执行。我们可以使用 @Factory 注解来运行多个测试类。TestNG XML 支持创建复杂的测试套件。 | TestNG 对于测试套件有更好的支持 | TestNG @Factory, TestNG XML Suite |
HTML 报告 | 我们需要额外的插件 surefire-report-plugin 来生成 HTML 报告 | TestNG 可以在测试运行后自动创建 HTML 报告 | TestNG 的 HTML 报告看起来已经过时了,但是简单易用。如果你需要与其他人分享 HTML 测试报告,我建议你用JUnit | JUnit HTML 报告, TestNG Tutorial |
从 Java 主方法运行 | 我们使用 JUnit 5 来通过 Java 主方法来运行测试用例 | 我们能使用 TestNG 的 run() 方法来在 Java 主方法中运行测试用例 | 两者都支持在 Java 主方法中运行测试用例 | JUnit Launcher API Docs, TestNG 从主方法运行 |
断言 | JUnit 提供了足够多的断言方法来对比预期和实际测试结果 | TestNG 提供了足够多的断言方法来对比预期和实际测试结果 | 两者在断言方面支持是相似的 | JUnit Assertions |
预设条件 | JUnit 支持预设条件来跳过特定测试用例 | TestNG 不支持预设条件 | JUnit 在基于预设条件跳过测试用例方面做的更好 | JUnit Assumptions |
顺序测试 | JUnit 5 仍然不支持顺序测试,但是它计划将在 5.3 版本支持该功能。 | TestNG 通过 priority 属性来支持将测试方法排序 | 当你想要测试方法安照特定顺序执行时,TestNG更合适 | |
禁用测试用例 | JUnit 支持多种方式禁用和启用测试用例。例如基于 OS、JRE 和 系统配置 | TestNG 支持禁用测试用例,但功能性有限 | 当你想要基于特定条件禁用或者启用测试用例时,JUnit 更适合 | JUnit 禁用测试用例, TestNG 禁用测试用例 |
并行测试 | JUnit 5 直至现在不支持并行测试 | TestNG 可以通过 XML 文件配置并行测试 | TestNG 支持并行测试,JUnit 5 的这个功能仍然在开发中 | TestNG 并行测试 |
监听 | JUnit 支持通过 Launcher API 来实现监听,不能机械性添加使用注解 | TestNG 支持多种监听方式,并且能够使用注解 | TestNG 在支持监听方面比 JUnit 做的更好 | TestNG 监听 |
相同点
1.都是Java工具
2.都是单元测试框架,都可以进行单元测试
3.都是提供注解的且大部分注解相似
4.都支持:参数化测试、异常测试、超时测试、忽略测试
不同点
1.TestNG支持多线程并发测试
2.TestNG支持只运行失败的测试用例
3.TestNG支持依赖测试
4.TestNG支持分组测试
5.在JUnit 中,必须声明@BeforeClass和@AfterClass方法作为静态方法,TestNG没有这个约束。
6.TestNG可以通过优先级字段Priority确定执行顺序
7.TestNG中子类不会运行父类的@BeforeClass和@AfterClass方法;Junit中会先运行父类的@BeforeClass方法,再运行自己的@BeforeClass方法,先运行自己的@AfterClass方法,再运行父类的@AfterClass方法。