test-03-java 单元测试框架 testNG 入门介绍 junit/junit5/testNG 详细对比

拓展阅读

test-01-java 单元测试框架 junit 入门介绍

test-02-java 单元测试框架 junit5 入门介绍

test-03-java 单元测试框架 testNG 入门介绍 junit/junit5/testNG 详细对比

test assert-01-Google Truth 断言

test 系统学习-03-TestNG Spock testng 入门使用教程

开源推荐

sensitive-word 敏感词开源工具使用入门

testNG 的入门案例,包含 maven 引入

maven 依赖

<dependencies><!-- TestNG --><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>7.3.0</version><scope>test</scope></dependency>
</dependencies>

测试类,和 junit 差不多:

import org.testng.Assert;
import org.testng.annotations.Test;public class TestNGExampleTest {@Testpublic void testAddition() {// 测试相加方法int result = add(2, 3);// 使用断言验证结果Assert.assertEquals(result, 5, "Addition failed: Expected 5, but got " + result);}@Testpublic void testSubtraction() {// 测试相减方法int result = subtract(5, 3);// 使用断言验证结果Assert.assertTrue(result > 0, "Subtraction failed: Expected result to be greater than 0");}private int add(int a, int b) {// 实际的相加方法return a + b;}private int subtract(int a, int b) {// 实际的相减方法return a - b;}
}

为什么已经有 junit4 了,还会有 testNG 呢?

JUnit 4 和 TestNG 都是用于Java应用程序测试的流行测试框架,它们有一些相似之处,但也有一些不同之处,导致在某些情况下选择使用 TestNG。

以下是一些原因:

  1. 更灵活的测试配置: TestNG 提供了更灵活的测试配置选项,可以通过 XML 文件进行配置,允许开发人员更细粒度地控制测试的执行方式,包括并发测试、测试组、测试套件等。

  2. 注解的丰富性: TestNG 提供了更多的注解,例如 @BeforeSuite@AfterSuite@BeforeTest@AfterTest 等,使测试方法的组织更加灵活。TestNG 的注解支持更丰富的测试生命周期管理。

  3. 参数化测试: TestNG 提供了更强大的参数化测试支持,通过 @DataProvider 注解,可以更轻松地实现数据驱动测试。

  4. 依赖测试: TestNG 具有更强大的依赖测试支持,可以通过 dependsOnMethodsdependsOnGroups 属性指定测试方法之间的依赖关系,确保测试方法按照指定的顺序执行。

  5. 测试分组和套件: TestNG 提供了更灵活的测试分组和测试套件功能,可以按照不同的维度组织测试,更容易管理和执行特定组的测试。

  6. 并发测试: TestNG 内置支持并发测试,可以配置测试套件中的测试以并行执行,提高测试效率。

  7. 监听器支持: TestNG 提供了丰富的监听器接口,可以通过实现这些接口定制测试执行期间的行为,例如,在测试开始或结束时执行一些操作。

  8. 软断言(Soft Assertions): TestNG 支持软断言,即使在断言失败时,测试方法仍然会继续执行,方便查看所有断言失败的情况。

  9. 跳过测试: TestNG 允许在测试方法上使用 @Test(enabled = false) 来标记测试方法为禁用状态,而不需要注释掉整个方法。

junit/junit5/testNG 等常见 java 测试框架的对比

功能/特性JUnit 4JUnit 5TestNG
注解@Test, @Before, @After, @Ignore, etc.@Test, @BeforeEach, @AfterEach, @BeforeAll, @AfterAll, etc.@Test, @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest, etc.
参数化测试使用 @Parameters 注解支持参数化测试方法,通过 @ParameterizedTest@ValueSource 等注解支持参数化测试方法,通过 @Parameters 注解
断言使用 JUnit 提供的 Assert使用 JUnit 5 提供的 Assertions使用 TestNG 提供的 Assert
测试生命周期单一测试生命周期(@Before@After在每个测试方法前后执行)更灵活的测试生命周期,可以使用 @BeforeEach@AfterEach@BeforeAll@AfterAll更灵活的测试生命周期,支持 @BeforeSuite@AfterSuite@BeforeTest@AfterTest
依赖测试通过方法名指定依赖关系使用 dependsOnMethods 属性指定测试方法的依赖关系使用 dependsOnMethodsdependsOnGroups 属性指定测试方法或测试组之间的依赖关系
并发测试不直接支持并发测试支持并发测试,可以配置测试类或测试方法并发执行支持并发测试,可以在测试套件或测试方法级别设置并发数
测试分组通过命名规则或自定义注解进行分组使用 @Tag 注解进行分组使用 @Test(groups = "groupname") 进行分组
测试套件不直接支持测试套件使用 @RunWith 注解和 @Suite 注解支持测试套件支持通过 XML 文件配置测试套件
数据驱动测试通常通过参数化测试实现支持参数化测试和动态测试(通过 @TestFactory 实现)支持数据驱动测试,通过 @DataProvider 注解提供测试数据
监听器通过实现 TestWatcher 接口等实现支持扩展 TestExecutionListener 接口和 @ExtendWith 注解提供了丰富的监听器接口,通过实现这些接口实现监听功能
报告生成需要依赖第三方插件,如 Ant 或 Maven 插件支持通过插件生成报告,如 Maven Surefire 插件自动生成详细的 HTML 报告
软断言不支持软断言不支持软断言,但可以通过异常处理实现类似的效果支持软断言,即使在断言失败时,测试方法仍然会继续执行
开发者社区巨大且成熟正在逐渐增长,对于新项目可能还没有 JUnit 4 大成熟且广泛使用,拥有强大的社区支持

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299740.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

隔壁小孩馋哭了都要问我要的MySQL数据库攻略

1 Mysql数据库 1.1 数据库概念 数据 描述事物的符号记录 包括数字、文字、图形、图像声音、档案记录等 以“记录”形式按统一的格式进行存储 表 将不同的记录组织在一起 用来存储具体数据 数据库 标的合集&#xff0c;是存储数据的仓库 以定的组织方式存储打的相互有…

不可能得到的最短骰子序列

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 给你一个长度为 n 的整数数组 rolls 和一个整数 k 。你扔一个 k 面的骰子 n 次&#xff0c;…

实战教学:零食百货商城小程序开发全程指导

随着移动设备的普及和互联网技术的发展&#xff0c;小程序成为越来越多人的选择&#xff0c;特别是在购物方面。开发一个零食百货商城小程序&#xff0c;可以让你在手机上随时随地购买各种零食&#xff0c;方便快捷。本文将为你提供全程指导&#xff0c;让你轻松开发一个成功的…

企业出海-如何保护客户账户安全?

近年来国内企业竞争日益激烈&#xff0c;许多企业在这般环境下难以持续发展。那么该如何获得业务的可持续性增长&#xff0c;如何获取更多的客户的同时开阔公司的视野&#xff1f;出海便是如今帮助国内企业能快速发展壮大的潮流之一&#xff0c;摆脱了局限于国内发展的束缚奔向…

自媒体实战篇:剪辑软件应用与实操

剪辑软件应用与实操 剪映基础界面认识 素材面板 导入本地素材,剪映自带素材库,音频,文本等素材合集面板播放预览 预览本地素材,,剪映自带素材库以及时间线面板中的素材的实时效果时间线面板 对素材进行基础的编辑操作,调整素材轨道等素材功能面板 可对素材或者文本等精细…

国外加固Appdome环境检测与绕过

文章目录 前言第一部分&#xff1a;定位检测逻辑的通用思路1. 通过linux“一切皆文件”思路定位2. 分析现有检测软件猜测可能检测点3. 通过正向开发思路定位4. 通过activity及弹窗定位 第二部分&#xff1a;检测结果展示整体流程1. Jni反射调用doDispath完成广播发送2. NativeB…

【网络安全 | 网络协议】结合Wireshark讲解IP协议

前言&#xff1a;IP协议传输过程与数据分片 当我们进行数据传输时&#xff0c;操作系统会创建一个 ICMP Echo Request 数据包&#xff0c;并在该数据包中包含要发送的目标 IP 地址。然后操作系统将数据包传递给网络协议栈&#xff0c;该数据包被封装成 IP 数据包。IP 数据包的…

地图服务器GeoServer的安装与配置

文章目录 1.安装配置Java2.安装配置Tomcat3 安装配置GeoServer GeoServer提供了多种安装配置方式&#xff0c;但是本质上GeoServer是一个基于Java Web的项目&#xff0c;因此我们理论上只需要安装Java&#xff0c;并且将其放置在一个Web服务器&#xff08;例如Apache Tomcat&am…

11.1Linux串口应用程序开发

UART简介 UART的全称是Universal Asynchronous Receiver and Transmitter&#xff0c;即异步发送和接收。 串口在嵌入式中用途非常的广泛&#xff0c;主要的用途有&#xff1a; 打印调试信息&#xff1b;外接各种模块&#xff1a;GPS、蓝牙&#xff1b; 串口因为结构简单、稳…

HTTP 原理

HTTP 原理 HTTP 是一个无状态的协议。无状态是指客户机&#xff08;Web 浏览器&#xff09;和服务器之间不需要建立持久的连接&#xff0c;这意味着当一个客户端向服务器端发出请求&#xff0c;然后服务器返回响应(response)&#xff0c;连接就被关闭了&#xff0c;在服务器端…

案例分析:西门子智能工厂

西门子全球首家原生数字化工厂&#xff0c;以其独特的数字化技术&#xff0c;在虚拟世界中构建了工厂的数字孪生&#xff0c;从而实现了从需求分析、规划设计、施工实施到生产运营全过程的数字化。这一原生数字化工厂的创新之处在于&#xff0c;它开创性地运用了原生数字孪生理…

说个真事,裁员真的会降本增笑

最近互联网公司放烟花的次数有些高&#xff0c;基本都扎堆 Q3~Q4 出现各类事件/事故。吃瓜都快跟不上了。 作为互联网民工&#xff0c;为什么裁员后会导致降本增笑呢&#xff1f;今天我们一起来聊聊。 各种事故烟花 现阶段各大厂都领上号了&#xff0c;阿里先崩&#xff0c;…