当前位置: 首页 > news >正文

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方法。
@TestMarks a class or a method as part of the test.
@BeforeXXX和@AfterXXX注释放在超类上时如何工作?

如果将这些注释放在超类上,则子类也将继承这些注释。这对于将多个测试类的测试设置集中在一个公共超类中非常有用。在这种情况下,TestNG保证@Before方法按照继承顺序执行(首先是最高的超类,然后沿着继承链向下),而@After方法则按照相反的顺序执行(沿着继承链向上)。

现在,我们将创建两个类,其中CodekruTest将是CodekruTestSubclass的超类,并具有以下结构

superClass and subclass

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注释

层级是-

  1. @BeforeSuite
  2. @BeforeTest
  3. @BeforeClass
  4. @BeforeMethod
  5. @测试
  6. @AfterMethod
  7. @AfterClass
  8. @AfterTest
  9. @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
http://www.lryc.cn/news/284221.html

相关文章:

  • 数据预处理 matlab 数据质量评估
  • 对象存储, 开源MinIO docker-compose.yml 文件
  • 爬虫笔记(一):实战登录古诗文网站
  • 适用于 Windows 11 的 12 个最佳免费 PDF 编辑器
  • 力扣每日一练(24-1-18)
  • MyBatis 使用报错:org.xml.sax.SAXParseException 元素内容必须由格式正确的字符数据或标记组成
  • PDF.js - 免费开源的 JavaScript 读取、显示 PDF 文档的工具库,由 Mozilla 开发并且持续维护
  • UI开发布局-HarmonyOS应用UI开发布局
  • 大数据开发之Hadoop(完整版+练习)
  • Redis与DB数据一致性-个人总结
  • VMware workstation安装debian-12.1.0虚拟机(最小化安装)并配置网络
  • SG-9101CGA(汽车+125°C可编程晶体振荡器)
  • 第十五届蓝桥杯单片机组备赛——独立键盘矩阵键盘
  • HCIA—— 16每日一讲:HTTP和HTTPS、无状态和cookie、持久连接和管线化、(初稿丢了,这是新稿,请宽恕我)
  • 使用JavaScript实现一个复杂功能:日期范围选择器
  • [C#]winform部署openvino调用padleocr模型
  • 【docker-compose】【nginx】内网环境https配置
  • 大语言模型无代码构建知识图谱概述
  • 链表回文结构
  • MyBatis框架基础到进阶
  • 【答案】2023年国赛信息安全管理与评估正式赛答案-模块1任务一
  • 【REMB 】翻译:草案remb-03
  • 力扣(leetcode)第830题较大分组的位置(Python)
  • 【导航】繁星学习随想录
  • Oracle 隐式数据类型转换
  • 压缩编码之不同缩放参数对重建图像质量的影响的python实现——JPEG变换编码不同压缩率的模拟
  • 大数据导论(2)---大数据与云计算、物联网、人工智能
  • 有序矩阵中第 K 小的元素
  • Nginx详细介绍(并从技术层面深度剖析)
  • 单元测试基本概念