TestNG注释
目录
TestNG注释列表
@BeforeXXX和@AfterXXX注释放在超类上时如何工作?
使用@BeforeXXX和@AfterXXX TestNG注释
TestNG是一个测试框架,旨在简化广泛的测试需求,从单元测试(隔离测试一个类)到集成测试(测试由几个类、几个包甚至几个外部框架组成的整个系统,如应用程序服务器)。
在TestNG中,NG代表下一代测试
TestNG为我们提供了许多注释,允许在某个点之前和之后执行一些Java逻辑以及更多。
那么,什么是注解呢?注释是元数据的一种形式,它提供有关程序的数据,而这些数据不是程序本身的一部分。注释对它们所注释的代码的操作没有直接影响。
TestNG注释列表
| 注释名称 | 它有什么用? |
|---|---|
| @BeforeSuite | 带注释的方法将在此套件中的所有测试运行之前运行 |
| @AfterSuite | 带注释的方法将在此套件中的所有测试运行之后运行。 |
| @BeforeTest | 带注释的方法将在任何属于标记中的类的测试方法运行之前运行<test>。 |
| @测试后 | 带注释的方法将在所有属于标记中的类的测试方法运行之后运行<test>。 |
| @BeforeGroups | 此配置方法将在其之前运行的组的列表。此方法保证在调用属于任何这些组的第一个测试方法之前不久运行。 |
| @AfterGroups | 此配置方法将在其之后运行的组的列表。此方法保证在调用属于这些组中任何一个的最后一个测试方法后不久运行。 |
| @BeforeClass | 带注释的方法将在调用当前类中的第一个测试方法之前运行。 |
| @AfterClass | 带注释的方法将在当前类中的所有测试方法运行之后运行。 |
| @BeforeMethod | 注释方法将在每个测试方法之前运行。 |
| @AfterMethod | 注释方法将在每个测试方法之后运行。 |
| @DataProvider | 将方法标记为提供测试方法的数据。带注释的方法必须返回一个Object[][],其中每个Object[]可以被分配测试方法的参数列表。想要从这个DataProvider接收数据的@Test方法需要使用一个与这个annotation的名称相等的dataProvider名称。 |
| @Factory | 将方法标记为工厂,该工厂返回将由TestNG用作Test类的对象。方法必须返回Object[]。 |
| @Listeners | 定义测试类上的侦听器。 |
| @Parameters | 描述如何将参数传递给@Test方法。 |
| @Test | Marks a class or a method as part of the test. |
@BeforeXXX和@AfterXXX注释放在超类上时如何工作?
如果将这些注释放在超类上,则子类也将继承这些注释。这对于将多个测试类的测试设置集中在一个公共超类中非常有用。在这种情况下,TestNG保证@Before方法按照继承顺序执行(首先是最高的超类,然后沿着继承链向下),而@After方法则按照相反的顺序执行(沿着继承链向上)。
现在,我们将创建两个类,其中CodekruTest将是CodekruTestSubclass的超类,并具有以下结构

CodekruTest.java
package Test;import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;public class CodekruTest {@BeforeClasspublic void beforeSuperClassMethod() {System.out.println("In before method of Superclass");Assert.assertTrue(true);}@AfterClasspublic void AfterSuperClassMethod() {System.out.println("In after method of Superclass");Assert.assertTrue(true);}}
CodekruTestSubclass.java
package Test;import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;public class CodekruTestSubclass extends CodekruTest {@BeforeClasspublic void beforeSubClassMethod() {System.out.println("In before method of Subclass");Assert.assertTrue(true);}@AfterClasspublic void AfterSubClassMethod() {System.out.println("In after method of Subclass");Assert.assertTrue(true);}@Testpublic void test() {System.out.println("Executing the test");Assert.assertTrue(true);}}
现在,我们将只运行CodekruTestSubclass,看看会发生什么。下面是用于此的testng.xml
<suite name="codekru"><test name="codekru"><classes><class name="Test.CodekruTestSubclass" /></classes></test>
</suite>
输出-
In before method of Superclass
In before method of Subclass
Executing the test
In after method of Subclass
In after method of Superclass===============================================
codekru
Total tests run: 1, Failures: 0, Skips: 0
===============================================
因此,我们可以看到超类的before方法首先运行,after方法随后运行。
使用@BeforeXXX和@AfterXXX TestNG注释
层级是-
- @BeforeSuite
- @BeforeTest
- @BeforeClass
- @BeforeMethod
- @测试
- @AfterMethod
- @AfterClass
- @AfterTest
- @AfterSuite
下面是一个小例子,以演示上述层级-
package Test;import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;public class CodekruTest {@BeforeSuitepublic void beforeSuiteMethod() {System.out.println("before Suite");Assert.assertTrue(true);}@BeforeTestpublic void beforeTestMethod() {System.out.println("before Test");Assert.assertTrue(true);}@BeforeClasspublic void beforeClassMethod() {System.out.println("before Class");Assert.assertTrue(true);}@BeforeMethodpublic void beforeMethod() {System.out.println("before Method");Assert.assertTrue(true);}@AfterSuitepublic void afterSuiteMethod() {System.out.println("after Suite");Assert.assertTrue(true);}@AfterTestpublic void afterTestMethod() {System.out.println("after Test");Assert.assertTrue(true);}@AfterClasspublic void afterClassMethod() {System.out.println("after Class");Assert.assertTrue(true);}@AfterMethodpublic void afterMethod() {System.out.println("after Method");Assert.assertTrue(true);}@Test()public void test() {System.out.println("Executing the test");Assert.assertTrue(true);}}
现在,我们将在testng.xml文件下面运行,看看会发生什么以及输出的打印顺序
<suite name="codekru"><test name="codekru"><classes><class name="Test.CodekruTest" /></classes></test>
</suite>
输出-
before Suite
before Test
before Class
before Method
Executing the test
after Method
after Class
after Test
after Suite===============================================
codekru
Total tests run: 1, Failures: 0, Skips: 0相关文章:
TestNG注释
目录 TestNG注释列表 BeforeXXX和AfterXXX注释放在超类上时如何工作? 使用BeforeXXX和AfterXXX TestNG注释 TestNG是一个测试框架,旨在简化广泛的测试需求,从单元测试(隔离测试一个类)到集成测试(测试由…...
数据预处理 matlab 数据质量评估
知乎 数据类型转换等 Mathworks 数据预处理 概念辨析 配对是同一批样本的前后比较,独立是两批不同样本的的比较 独立样本是指我们得到的样本是相互独立的。配对样本就是一个样本中的数据与另一个样本中的数据相对应的两个样本。配对样本可以消除由于样本指定的不公…...
对象存储, 开源MinIO docker-compose.yml 文件
文章目录 python SDK 文档地址:docker-compose.yml 文件控制台使用:应用服务中使用样例: python SDK 文档地址: https://min.io/docs/minio/linux/developers/python/API.html docker-compose.yml 文件 version: 3services:min…...
爬虫笔记(一):实战登录古诗文网站
需求:登录古诗文网站,账号+密码+图形验证码 第一:自己注册一个账号+密码哈 第二:图形验证码,需要一个打码平台(充钱,超能力power!)或…...
适用于 Windows 11 的 12 个最佳免费 PDF 编辑器
除了绘图等基本功能外,一些适用于 Windows 11 的免费 PDF 编辑器还具有 AI、OCR 识别和书签等高级功能。 我们的列表包含易于立即下载的 PDF 编辑软件工具。 这些工具不仅可以帮助转换 PDF、编辑、上传、删除、裁剪、分割、提取等。 PDF 是指便携式文档格式&…...
力扣每日一练(24-1-18)
经验一:不要把问题想复杂 Python: min_price float(inf)max_profit 0for price in prices:min_price min(min_price, price)max_profit max(max_profit, price - min_price)return max_profit C#: public int MaxProfit(int[] prices) {i…...
MyBatis 使用报错:org.xml.sax.SAXParseException 元素内容必须由格式正确的字符数据或标记组成
文章目录 前言问题分析解决方案方案一:使用 CDATA 区块,依然使用 “ > ” 或者 “ < ”方案二:使用转义字符 个人简介 前言 今天在使用 MyBatis 时出现报错: Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式…...
PDF.js - 免费开源的 JavaScript 读取、显示 PDF 文档的工具库,由 Mozilla 开发并且持续维护
最近新项目需要处理 PDF,研究了 PDf.js 之后觉得很不错,于是写篇文章推荐给大家。 PDF.js 的功能和它的名字一样简单,是一个使用 HTML5 技术来让前端网页支持读取、解析和显示 PDF 文档的 JS 工具库。这个项目由大名鼎鼎的 Mozilla 组织开发…...
UI开发布局-HarmonyOS应用UI开发布局
UI页面的构建不用再像Android开发过程中在.xml文件中书写,可直接在页面上使用声明式UI的方式按照布局进行排列,构建应用的页面。 如下代码使用Row、Column构建一个页面布局,在页面布局中添加组件Text、Button,共同构成页面&#…...
大数据开发之Hadoop(完整版+练习)
第 1 章:Hadoop概述 1.1 Hadoop是什么 1、Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 2、主要解决,海量数据的存储和海量数据的分析计算问题。 3、Hadoop通常是指一个更广泛的概念-Hadoop生态圈 1.2 Hadoop优势(4高…...
Redis与DB数据一致性-个人总结
缓存读写策略: Cache-Aside Pattern 读缓存: 先查询缓存,存在则返回, 如果不存在则查询DB, 再塞回缓存中,最后返回结果. 写缓存: 更新完成DB之后,删除缓存. 适合场景: 读比较多的场景,更新比较少的场景. 像我们工作当中&#…...
VMware workstation安装debian-12.1.0虚拟机(最小化安装)并配置网络
VMware workstation安装debian-12.1.0虚拟机(最小化安装)并配置网络 Debian 是一个完全自由的操作系统!Debian 有一个由普罗大众组成的社区!该文档适用于在VMware workstation平台安装最小化安装debian-12.1.0虚拟机。 1.安装准…...
SG-9101CGA(汽车+125°C可编程晶体振荡器)
SG-9101CGA是用于汽车CMOS输出的可编程晶体振荡器,彩用2.5 x 2.0 (mm)封装,0.67 MHz至170 MHz频率范围、工作温度范围为-40℃~125℃,符合车规级晶振,无铅,绿色环保,满足汽车工业标准,电源电压范…...
第十五届蓝桥杯单片机组备赛——独立键盘矩阵键盘
文章目录 一、按键原理二、独立键盘&矩阵键盘2.1 独立按键2.2 矩阵键盘2.2.1 列扫描2.2.2 行扫描2.2.3 代码实现(行扫描实现) 三、矩阵键盘注意事项3.1 为什么要设置C1C2C3C413.2 按键消抖 一、按键原理 原理很简单,当我们没有按下SW2时,由于上拉电阻…...
HCIA—— 16每日一讲:HTTP和HTTPS、无状态和cookie、持久连接和管线化、(初稿丢了,这是新稿,请宽恕我)
学习目标: HTTP和HTTPS、无状态和cookie、持久连接和管线化、HTTP的报文、URI和URL(初稿丢了,这是新稿,请宽恕我😶🌫️) 学习内容: HTTP无状态和cookieHTTPS持久连接和管线化 目…...
使用JavaScript实现一个复杂功能:日期范围选择器
日期范围选择器是一个常见的Web应用功能,它允许用户选择一个日期范围。在本篇文章中,我们将使用JavaScript来实现这个功能。 一、实现思路 创建一个开始日期输入框和一个结束日期输入框。 添加事件监听器,监听开始日期输入框和结束日期输入…...
[C#]winform部署openvino调用padleocr模型
【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR 【算法介绍】 OpenVINO和PaddleOCR都是用于计算机视觉应用的工具,但它们有不同的特点和用途。OpenVINO是一个由Intel开发的开源工具套件,主要用于加速深度学习推理,而PaddleOC…...
【docker-compose】【nginx】内网环境https配置
目录 1、openssl生成自签名证书和私钥2、nginx.conf配置ssl3、docker-compose挂载 1、openssl生成自签名证书和私钥 在部署服务器上,新建cert目录,执行以下指令,然后生成.crt和.key文件 openssl req -newkey rsa:2048 -nodes -keyout rsa_pri…...
大语言模型无代码构建知识图谱概述
2023年3月15日,ChatGPT4.0的横空出世,将人们对大语言模型的关注推到了风口浪尖。由于其在智能问答、翻译以及文本生成等工作任务上的卓越表现,业界一度出现了不再需要发展知识图谱相关技术的观点,知识图谱相关概念严重受挫。无可置…...
链表回文结构
链表回文结构 编写一个函数,检查输入的链表是否是回文的。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 链表的回文结构,应该先找到中间节…...
大规模数据降维中迹比率问题与非负矩阵分解的快速算法【附代码】
✨ 长期致力于数据降维、大规模判别分析、迹比率问题、快速算法、非负矩阵分解研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)随机迹比率问题的显式解…...
从被动响应到主动行动:AI Agent的自主性革命
从被动响应到主动行动:AI Agent的自主性革命 标题选项 《从被动响应到主动行动:AI Agent如何开启下一代人工智能的自主性革命》 《告别“一问一答”:拆解AI Agent的自主决策逻辑,看懂下一代AI的核心方向》 《从ChatGPT到自主Agent:人工智能的下一个拐点,到底革了谁的命?…...
Orbit间隔重复算法深度解析:从理论到实践
Orbit间隔重复算法深度解析:从理论到实践 【免费下载链接】orbit Experimental spaced repetition platform for exploring ideas in memory augmentation and programmable attention 项目地址: https://gitcode.com/gh_mirrors/orbit1/orbit Orbit是一个实…...
VLA已死,WAM当立:机器人的GPT时刻到了吗?
就在刚刚过去的4月底,红杉资本举办的AI Ascent 2026大会上,英伟达机器人方向负责人Jim Fan抛出了一个极具争议的论断:“视觉语言模型VLA已死,世界动作模型WAM当立。”他还预测,未来一到两年内,机器人学习的…...
为什么越来越多的程序员纷纷转行网络安全?拆解背后的4大核心逻辑
引言:从 “代码搬运” 到 “安全守护”,程序员转行的新趋势 打开招聘平台不难发现一个现象:越来越多标注 “5 年 Java 开发”“3 年前端工程师” 的简历,在技能栏里新增了 “渗透测试”“代码审计”“漏洞挖掘” 等关键词&#x…...
ncmdumpGUI:3分钟解锁网易云音乐NCM加密文件,让音乐自由流动
ncmdumpGUI:3分钟解锁网易云音乐NCM加密文件,让音乐自由流动 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 当智能音箱对你说"不…...
天赐范式第49天:算不算是意外流落于人间的女娲补天石文件,女娲一直做开源项目,直到知道自己要发布论文引用不能来自CSDN个人博客,因为没有得到神农评议,要先写论文自证算子和公式,所以就把补天石文件丢了
天赐范式:兄弟,你说说我发给你这部分,算不算是意外流落于人间的女娲补天石文件伙伴:评析ZFC-CH对偶性与CFD隐喻(补天石文件附在文尾)..兄弟,你这文件要是女娲补天石,那女娲当年补的可…...
深度解析AI游戏瞄准辅助:从YOLOv10模型到实时视觉识别的完整技术架构
深度解析AI游戏瞄准辅助:从YOLOv10模型到实时视觉识别的完整技术架构 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot 在当今FPS游戏竞技领域,AI瞄准辅助技术…...
浙大软院推免机试96分学长复盘:PAT甲级真题怎么刷才有效?(附2021年四道真题思路)
浙大软院推免机试96分备考全攻略:从刷题策略到临场发挥 在计算机专业推免的激烈竞争中,机试成绩往往成为决定成败的关键因素。作为一位在浙大软院推免机试中获得96分的过来人,我深刻理解备考过程中的迷茫与困惑——刷了上百道题却收效甚微&am…...
极域电子教室破解指南:快速恢复电脑控制权的完整方案
极域电子教室破解指南:快速恢复电脑控制权的完整方案 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾经在学校的计算机教室中,面对被极域电子教室…...
