TestNG @AfterClass 注解

目录

那么,这个@AfterClass注释的方法什么时候执行呢?

那么,我们可以在一个类中放置多个@AfterClass注释方法吗?

@AfterClass注释放在超类上时如何工作?


在这篇文章中,我们将讨论TestNG中的@AfterClass注释。@AfterClass注释的方法将在特定类中的所有测试用例运行后运行。这可以帮助我们在运行了一个类中的所有测试用例之后进行一些清理或重置活动。

那么,这个@AfterClass注释的方法什么时候执行呢?
<suite name="codekru"><test name="codekru"><classes><class name="Test.CodekruTestFirst"> <!-- @BeforeClass method of CodekruTestFirst class will execute here --><methods><include name="testMethod" /></methods></class>  <!-- @AfterClass method of CodekruTestFirst class will execute here --><class name="Test.CodekruTestSecond">  <!-- @BeforeClass method of CodekruTestSecond class will execute here --><methods><include name="testMethod" /></methods></class> <!-- @AfterClass method of CodekruTestSecond class will execute here --></classes></test>
</suite>

现在,我们将采用两个类(CodekruTestFirst和CodekruTestSecond),并在每个类中保留一个带@AfterClass注释的方法。

CodekruTestFirst.java

package Test;import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;public class CodekruTestFirst {@AfterClasspublic void afterClass() {System.out.println("afterClass method in CodekruTestFirst class");}@Testpublic void testMethod() {System.out.println("Executing the test in CodekruTestFirst class");Assert.assertTrue(true);}}

CodekruTestSecond.java

package Test;import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;public class CodekruTestSecond {@AfterClasspublic void afterClass() {System.out.println("afterClass method in CodekruTestSecond class");}@Testpublic void testMethod() {System.out.println("Executing the test in CodekruTestSecond class");Assert.assertTrue(true);}}

现在,我们将运行下面的XML文件

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" ><suite name="codekru"><test name="codekru"><classes><class name="Test.CodekruTestFirst"><methods><include name="testMethod" /></methods></class>  <!-- @AfterClass method of CodekruTestFirst class will execute here --><class name="Test.CodekruTestSecond"><methods><include name="testMethod" /></methods></class> <!-- @AfterClass method of CodekruTestFirst class will execute here --></classes></test>
</suite>

产出-

Executing the test in CodekruTestFirst class
afterClass method in CodekruTestFirst class
Executing the test in CodekruTestSecond class
afterClass method in CodekruTestSecond class===============================================
codekru
Total tests run: 2, Failures: 0, Skips: 0

这里发生了什么 

  • 默认情况下,TestNG将按照XML文件中的顺序运行测试。&因此,它获取了CodekruTestFirst类,运行了它的test方法,然后运行了它的@AfterClass注释方法。
  • 在那之后,它去了CodekruTestSecond类,运行了它的测试用例,然后是它的@AfterClass注释方法。
那么,我们可以在一个类中放置多个@AfterClass注释方法吗?

是的,我们可以在一个类中放置多个@AfterClass注释的方法,然后所有这些注释的方法都将在该类的所有测试用例执行后运行。让我们看一个例子。

import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;public class CodekruTestSecond {@AfterClasspublic void afterClass1() {System.out.println("in afterClass1 method");}@AfterClasspublic void afterClass2() {System.out.println("in afterClass2 method");}@Testpublic void testMethod() {System.out.println("Executing the test in CodekruTestSecond class");Assert.assertTrue(true);}}

我们将运行下面的XML文件来执行CodekruTestSecond类。

<suite name="codekru"><test name="codekruTest"><classes><class name="Test.CodekruTestSecond" /></classes></test>
</suite>

运行XML文件后的输出-

Executing the test in CodekruTestSecond class
in afterClass1 method
in afterClass2 method===============================================
codekru
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
@AfterClass注释放在超类上时如何工作?

让我们通过一个例子来看看这个问题。

package Test;import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;class CodekruTest {@AfterClasspublic void afterClassMethod() {System.out.println("afterClassMethod called");}}public class CodekruTestSubclass extends CodekruTest {@Test()public void test() {System.out.println("Executing the subclass test");Assert.assertTrue(true);}}

现在,我们将在testng.xml下面运行,看看会发生什么。

<suite name="codekru"><test name="codekru"><classes><class name="Test.CodekruTestSubclass" /></classes></test>
</suite>

产出-

Executing the subclass test
afterClassMethod called===============================================
codekru
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0

因此,即使afterClassMethod存在于超类中,它也会被执行。这是因为afterClassMethod被子类继承了。但是,如果我们将afterClassMethod设置为私有,它将不会运行,因为私有方法不能被子类继承。

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

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

相关文章

STL-内建函数对象

算术仿函数关系仿函数逻辑仿函数这些仿函数所产生的对象&#xff0c;用法和一半函数完全相同使用这些内建函数对象&#xff0c;需要引入头文件#include 1 实现四则运算 其中negate是一元运算&#xff0c;其他都是二元运算 仿函数原型&#xff1a; template T plus //加法仿函数…

鸿蒙HarmonyOS获取GPS精确位置信息

参考官方文档 #1.初始化时获取经纬度信息 aboutToAppear() {this.getLocation() } async getLocation () {try {const result await geoLocationManager.getCurrentLocation()AlertDialog.show({message: JSON.stringify(result)})}catch (error) {AlertDialog.show({message…

派网AX50C做多宽带路由和核心交换机配置实战教程

接近300办公人员的工厂需要网络升级&#xff0c;我规划设计和部署实施了以下方案&#xff0c;同样是简约不简单&#xff0c;在满足性能需求稳定性的前提下&#xff0c;既有经济性&#xff0c;又有安全性。 派网做路由器&#xff0c;刚好开启默认防病毒策略&#xff0c;省下来一…

《微信小程序开发从入门到实战》学习九十四

7.1 视图容器组件 7.1.4 movable-view和movable-area组件 movable-view是一个可移动的视图容器&#xff0c;它需要与movable-area组件结合使用。movabke-view只能放在movable-area组件中&#xff0c;在movable-area组件的范围内拖曳滑动。 movable-view组件属性如下&#xf…

[HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

防御保护防火墙的NET使用

要求如下 下图为实验图&#xff1a;根据四条要求分析&#xff0c;&#xff0c;图中的分公司与本实验无关&#xff0c;直接无视掉。 要求一&#xff1a;生产区在工作时间内可以访问服务器区&#xff08;DMZ&#xff09;&#xff0c;仅可以访问http服务器&#xff1b; 要求二&am…

【C++中STL】map/multimap容器

map/multimap容器 map基本概念map构造和赋值map的大小和交换map插入和删除map的查找和统计 map排序 map基本概念 map中的所有元素都是pair对组&#xff0c;高效率&#xff0c;pair中的第一个元素为key&#xff08;键值&#xff09;&#xff0c;起到索引作用&#xff0c;第二个…

“趣味夕阳,乐享生活”小组活动(第二节)

立冬以来&#xff0c;天气日渐寒冷&#xff0c;气温变化较大&#xff0c;各种传染病多发&#xff0c;为进一步增强老年人冬季预防传染病保健意识及科学合理健康的生活方式。近日&#xff0c;1月22日&#xff0c;南阳市人人社工灌涨站开展了“趣味夕阳&#xff0c;乐享生活”小组…

Python zip函数

在Python编程中&#xff0c;zip()函数是一个功能强大而灵活的工具&#xff0c;用于将多个可迭代对象&#xff08;如列表、元组、字符串等&#xff09;组合成一个元组的序列。本文将深入探讨zip()函数的用法、语法、示例代码&#xff0c;并探讨其在实际编程中的应用场景。 什么…

pytorch 实现中文文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/mi…

MySQL十部曲之一:MySQL概述及手册说明

文章目录 数据库、数据库管理系统以及SQL之间的关系关系型数据库与非关系型数据库手册语法约定 数据库、数据库管理系统以及SQL之间的关系 名称说明数据库&#xff08;Database&#xff09;即存储数据的仓库&#xff0c;其本质是一个文件系统。它保存了一系列有组织的数据。数…

今日AI大热潮,明日智能风向标

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

卢曼卡片(记笔记方法)

一种记笔记的方法&#xff0c;把灵感记下来然后归档。 比较有参考意义的&#xff1a; 保持记录&#xff0c;作为素材摘抄时用自己的话表述&#xff0c;只收藏全文达不到消化的效果归档寻找笔记之间的关联输出 在做的&#xff1a; 常年记笔记&#xff0c;写备忘录&#xff0…

mybatis-plus常用使用方法

** mybaits-plus常用使用方法 ** 常用三层分别继承方法 1.1mapper层&#xff08;接口定义层&#xff09;可以用BaseMapper<> 例如&#xff1a; 1.2.里面常用的封装方法有 1.3常用方法介绍 【添加数据&#xff1a;&#xff08;增&#xff09;】int insert(T entity);…

RUST笔记:candle使用基础

candle介绍 candle是huggingface开源的Rust的极简 ML 框架。 candle-矩阵乘法示例 cargo new myapp cd myapp cargo add --git https://github.com/huggingface/candle.git candle-core cargo build # 测试&#xff0c;或执行 cargo ckeckmain.rs use candle_core::{Device…

力扣hot100 课程表 拓扑序列

Problem: 207. 课程表 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 三叶题解 复杂度 时间复杂度: O ( n m ) O(nm) O(nm) 空间复杂度: O ( n m ) O(nm) O(nm) Code class Solution{int N 100010, M 5010, idx;int[] in new int[N];// in[i] 表示节…

Linux/Uinx 系统编程:getopt()函数用法

Linux/Uinx 系统编程&#xff1a;getopt()函数用法 getopt() 函数描述 getopt()函数是用来分析命令行参数的&#xff0c;该函数由Unix标准库提供&#xff0c;包含在<unistd.h>头文件中。 函数原型 #include <unistd.h> int getopt(int argc, char * const argv…

LeetCode刷题—链表—206反转链表easy(双指针与递归)

1、题目属于对基础的数据结构的操作&#xff0c;出现频次较高 2、解题思路如下&#xff1a; 双指针法&#xff1a; 解这道题&#xff0c;首先明白&#xff1a; 1、操作步骤 2、迭代 3、循环边界条件&#xff0c;确定初始值和循环终止条件 4、最后返回值方法是什么呢&#x…

Ubuntu环境vscode配置Log4cplus库

1、下载源码 http://sourceforge.net/projects/log4cplus/ 2、安装 例如我下载的是2.0.8版本压缩包&#xff0c;需要解压缩 log4cplus-2.0.8.7z安装解压工具&#xff1a; apt install p7zip-full解压&#xff1a; 7z x log4cplus-2.0.8.7z -r -o/home/配置及编译安装&#x…

MySQL十部曲之四:MySQL中的数据类型

文章目录 前言概述数字类型数字类型语法数字类型字面量十六进制字面量位字面量布尔字面量 数字类型的属性超出范围和溢出处理 时间和日期类型时间和日期类型语法DATE、DATETIME和TIMESTAMP的异同TIMESTAMP和DATETIME的自动初始化和更新时间和日期字面量 字符串类型字符串类型语…