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.rhkb.cn/news/225443.html

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

相关文章

【Vue篇】基础篇—Vue指令,Vue生命周期

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;Vue概述&#x1f384;快速入门&#x1f33a;Vue指令⭐v-…

Android studio 连接夜神模拟器

前言&#xff1a; 在夜神模拟器安装目录&#xff0c;直接打开powerShell&#xff0c;然后输入&#xff1a;nox_adb.exe connect 127.0.0.1:62001&#xff0c;命令无法执行出现以下错误&#xff1a; 按照上面的提示&#xff0c;键入&#xff1a;.\nox_adb.exe 依然无法执行 如…

layui表格中预览视频和图片

全代码 <!DOCTYPE html> <html><head><title>Layui&#xff1a;数据表格table中预览图片、视频</title><meta charset"utf-8"/><link rel"stylesheet" href"../dist/css/layui.css"><style>&l…

模式识别与机器学习-判别式分类器

模式识别与机器学习-判别式分类器 生成式模型和判别式模型的区别线性判别函数多分类情况多分类情况1多分类情况2多分类情况3 例题 广义线性判别函数实例 分段线性判别函数Fisher线性判别感知机算法例&#xff1a;感知机多类别分类 谨以此博客作为学习期间的记录 生成式模型和判…

D9741 PWM控制器电路,定时闩锁、短路保护电路,输出基准电压(2.5V) 采用SOP16封装

D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。 主要特点&#xff1a;● 高精度基准电路 ● 定时闩锁、短路保护电路 ● 低电压输入时误操作保护电路 ● 输出基准电…

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.骑手优化算法4.实验参数设定5.算法结果6.…

【WPF】使用Behavior以及ValidationRule实现表单校验

文章目录 使用ValidationRule实现检测用户输入EmptyValidationRule 非空校验TextBox设置非空校验TextBox设置非空校验并显示校验提示 结语 使用ValidationRule实现检测用户输入 EmptyValidationRule是TextBox内容是否为空校验&#xff0c;TextBox的Binding属性设置ValidationRu…

使用 Elasticsearch 检测抄袭 (二)

我在在之前的文章 “使用 Elasticsearch 检测抄袭 &#xff08;一&#xff09;” 介绍了如何检文章抄袭。这个在许多的实际使用中非常有意义。我在 CSDN 上的文章也经常被人引用或者抄袭。有的人甚至也不用指明出处。这对文章的作者来说是很不公平的。文章介绍的内容针对很多的…

解决Pycharm pip安装模块太慢问题,pycharm2022没有manage repositories配置镜像源

解决方案 方法清华阿里云中国科技大学华中理工大学 或者直接-i 加镜像 方法 URL写下面任意一个 清华 https://pypi.tuna.tsinghua.edu.cn/simple阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学 http:/…

前端项目重构的深度思考和复盘

摘要&#xff1a; 项目重构是每一家稳定发展的互联企业的必经之路, 就像一个产品的诞生, 会经历产品试错和产品迭代 一样, 随着业务或新技术的不断发展, 已有架构已无法满足更多业务扩展的需求, 所以只有通过重构来让产品“进化”, 才能跟上飞速发展的时代浪潮. 技术因素 早期…

TVS 管选型与 ESD 防护设计

文章目录 ESD 防护设计 TVS管的基础特性 TVS管的选型方法 TVS管布局细节 参考文献 ESD 防护设计 静电防护设计是让电路板外接的各类金属按钮开关在接触到外界空气放电或接触放电时&#xff0c;在这种瞬间出现的大能量注入到电路板后&#xff0c;能够通过某种设计好的通道泄…

python(上半部分)

第一部分 1、input()语句默认结果是字符串 2、type()可以判断变量的类型 3、input()输出语句 &#xff08;默认为字符串类型&#xff09; 4、命名规则&#xff1a;中文、英文、数字、_&#xff0c;数字不可开头&#xff0c;大小写敏感。 5、 %s&#xff1a;将内容转换成…

vue3+ts 可视化大屏无限滚动table效果实现

注意&#xff1a;vue3版本需使用 vue3-seamless-scroll npm npm install vue3-seamless-scroll --save页面引入 TS import { Vue3SeamlessScroll } from "vue3-seamless-scroll";代码使用&#xff08;相关参数可参考&#xff1a;https://www.npmjs.com/package/vu…

Java整合APNS推送消息-IOS-APP(基于.p12推送证书)

推送整体流程 1.在开发者中心申请对应的证书&#xff08;我用的是.p12文件&#xff09; 2.苹果手机用户注册到APNS&#xff0c;APNS将注册的token返回给APP&#xff08;服务端接收使用&#xff09;。 3.后台服务连接APNS&#xff0c;获取连接对象 4.后台服务构建消息载体 5.后台…

html table+css实现可编辑表格

要实现可编辑的 HTML 表格&#xff0c;你可以使用 JavaScript 和 HTML5 的 contenteditable 属性。 <!DOCTYPE html> <html> <head><style>table {border-collapse: collapse;width: 100%;}th, td {border: 1px solid black;padding: 8px;text-align:…

LENOVO联想笔记本小新Pro 14 IRH8 2023款(83AL)电脑原装出厂Win11系统恢复预装OEM系统

链接&#xff1a;https://pan.baidu.com/s/1M1iSFahokiIHF3CppNpL4w?pwdzr8y 提取码&#xff1a;zr8y 联想原厂系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等自带的预装软件程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件…

关于Zoom ZTP和AudioCodes Ltd桌面电话缺陷暴露,导致用户遭受窃听的动态情报

一、基本内容 近期SySS安全研究员发布分析报告显示&#xff0c;Zoom的零接触&#xff08;ZTP&#xff09;和AudioCodes Ltd桌面电话配置功能中发现高危漏洞&#xff0c;可以获得对设备的完全远程控制并不受限制的访问可以被武器化&#xff0c;以窃听房间或电话、通过设备并攻击…

使用poi将pptx文件转为图片详解

目录 项目需求 后端接口实现 1、引入poi依赖 2、代码编写 1、controller 2、service层 测试出现的bug 小结 项目需求 前端需要上传pptx文件&#xff0c;后端保存为图片&#xff0c;并将图片地址保存数据库&#xff0c;最后大屏展示时显示之前上传的pptx的图片。需求看上…

Jmeter的接口自动化测试

在去年实施了一年的三端&#xff08;PC、无线M站、无线APP【Android、IOS】&#xff09;后&#xff0c;今年7月份开始&#xff0c;我们开始进行接口自动化的实施&#xff0c;目前已完成了整个框架的搭建以及接口的持续测试集成。今天做个简单的分享。 在开始自动化投入前&#…

[Angular] 笔记 10:服务与依赖注入

什么是 Services & Dependency Injection? chatgpt 回答&#xff1a; 在 Angular 中&#xff0c;Services 是用来提供特定功能或执行特定任务的可重用代码块。它们可以用于处理数据、执行 HTTP 请求、管理应用程序状态等。Dependency Injection&#xff08;依赖注入&#…