TestNG注释- @AfterMethod

之前,我们讨论了@BeforeMethod注释,在这篇文章中,我们将讨论TestNG的@AfterMethod注释。@AfterMethod注释的方法在类中的每个测试用例或测试方法之后执行。

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

下面的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="testMethod1" /><!-- @AfterMethod annotated method of CodekruTestFirst class will execute here --><include name="testMethod2" /><!-- @AfterMethod annotated method of CodekruTestFirst class will again execute here --></methods></class><class name="Test.CodekruTestSecond"><methods><include name="testMethod1" /><!-- @AfterMethod annotated method of CodekruTestSecond class will execute here --><include name="testMethod2" /><!-- @AfterMethod annotated method of CodekruTestSecond class will again execute here --></methods></class></classes></test>
</suite>

因此,如上面的XML所示,@AfterMethod注释的方法将在类中的每个测试用例之后执行。让我们看看实际情况。

CodekruTestFirst.java

package Test;import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;public class CodekruTestFirst {@AfterMethodpublic void afterMethod() {System.out.println("afterMethod in CodekruTestFirst class");}@Testpublic void testMethod1() {System.out.println("Executing the test1 in CodekruTestFirst class");Assert.assertTrue(true);}@Testpublic void testMethod2() {System.out.println("Executing the test2 in CodekruTestFirst class");Assert.assertTrue(true);}}

CodekruTestSecond.java

package Test;import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;public class CodekruTestSecond {@AfterMethodpublic void afterMethod() {System.out.println("afterMethod in CodekruTestSecond class");}@Testpublic void testMethod1() {System.out.println("Executing the test1 in CodekruTestSecond class");Assert.assertTrue(true);}@Testpublic void testMethod2() {System.out.println("Executing the test2 in CodekruTestSecond class");Assert.assertTrue(true);}}

现在,我们将使用下面的XML文件执行这两个类

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

XML文件的输出-

Executing the test1 in CodekruTestFirst class
afterMethod in CodekruTestFirst class
Executing the test2 in CodekruTestFirst class
afterMethod in CodekruTestFirst class
Executing the test1 in CodekruTestSecond class
afterMethod in CodekruTestSecond class
Executing the test2 in CodekruTestSecond class
afterMethod in CodekruTestSecond class===============================================
codekru
Total tests run: 4, Passes: 4, Failures: 0, Skips: 0
===============================================
这里发生了什么

默认情况下,TestNG将按照XML文件中的顺序运行我们的测试。因此,它将选择CodekruTestFirst类并运行其第一个测试用例,然后是@AfterMethod注释的方法,然后再次运行第二个测试用例,然后是@AfterMethod注释的方法,依此类推,直到所有用例都被执行。
然后,它将选择CodekruTestSecond类并以相同的方式执行它。

现在,让我们来玩一点牛鬼蛇神

如果一个类中有两个带@AfterMethod注释的方法怎么办?他们两个会被处理吗?

了解这一点的最简单方法就是去做。所以,让我们在CodekruTestFirst类中再放一个带注释的方法。

package Test;import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;public class CodekruTestFirst {@AfterMethodpublic void afterMethod1() {System.out.println("afterMethod1 in CodekruTestFirst class");}@AfterMethodpublic void afterMethod2() {System.out.println("afterMethod2 in CodekruTestFirst class");}@Testpublic void testMethod1() {System.out.println("Executing the test1 in CodekruTestFirst class");Assert.assertTrue(true);}@Testpublic void testMethod2() {System.out.println("Executing the test2 in CodekruTestFirst class");Assert.assertTrue(true);}

下面是运行CodekruTestFirst类的XML文件。

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

XML文件的输出-

Executing the test1 in CodekruTestFirst class
afterMethod1 in CodekruTestFirst class
afterMethod2 in CodekruTestFirst class
Executing the test2 in CodekruTestFirst class
afterMethod1 in CodekruTestFirst class
afterMethod2 in CodekruTestFirst class===============================================
codekru
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================

在这里,我们可以看到两个@AfterMethod注释的方法都运行了。所以,如果你把一个或多个带注释的方法放在一个类中并不重要,它们都将在该类中的每个测试用例之后运行。

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

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

相关文章

TS-React:useRef 使用

不能给 useRef 的 current 属性赋值&#xff0c;提示以下错误信息&#xff1a; Cannot assign to ‘current’ because it is a read-only property.&#xff08;不能给current属性复制&#xff0c;因为它是一个只读属性。&#xff09; 代码如下所示&#xff1a; let cameraM…

uniapp上传音频文件到服务器

视频教程地址&#xff1a; 【uniapp录音上传组件&#xff0c;将录音上传到django服务器】 https://www.bilibili.com/video/BV1wi4y1p7FL/?share_sourcecopy_web&vd_sourcee66c0e33402a09ca7ae1f0ed3d5ecf7c uniapp 录制音频文件上传到django服务器保存到服务器 &#xf…

《动手学深度学习(PyTorch版)》笔记3.6

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

stm32 裸机点亮led

stm32不用库 裸机点亮led startup.s 定义栈入口函数 进入main .syntax unified .cpu cortex-m3 .fpu softvfp .thumb.global vtable .global reset_handler.type vtable, %object vtable:.word _estack.word reset_handler .size vtable, .-vtable.section .data .word _sidat…

docker 网络及如何资源(CPU/内存/磁盘)控制

安装Docker时&#xff0c;它会自动创建三个网络&#xff0c;bridge&#xff08;创建容器默认连接到此网络&#xff09;、 none 、host docker网络模式 Host 容器与宿主机共享网络namespace&#xff0c;即容器和宿主机使用同一个IP、端口范围&#xff08;容器与宿主机或其他使…

第140期 为什么有人无脑吹分布式(20240126)

数据库管理140期 2024-01-26 第140期 为什么有人无脑吹分布式&#xff08;20240126&#xff09;1 环境2 场景3 首席补刀总结 第140期 为什么有人无脑吹分布式&#xff08;20240126&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09; Oracle ACE Associa…

mac安装telnet命令

1、安装brew 在mac终端执行命令&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 报错&#xff1a; curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercon…

C++ 设计模式之解释器模式

【声明】本题目来源于卡码网&#xff08;卡码网KamaCoder&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是解释器模式&#xff08;第22种设计模式&#xff09; 解释器模式&#xff08;Interpreter…

CodeGPT

GitCode - 开发者的代码家园 gitcode.com/ inscode.csdn.net/liujiaping/java_1706242128563/edit?openFileMain.java&editTypelite marketplace.visualstudio.com/items?itemNameCSDN.csdn-codegpt&spm1018.2226.3001.9836&extra%5Butm_source%5Dvip_chatgpt_c…

【算法】用JAVA代码实现LRU 【缓存】【LRU】

LRU(Least Recently Used)是一种常见的缓存淘汰策略,用于在缓存空间不足时确定哪些数据应该被淘汰。其基本原则是淘汰最近最少被访问的数据。 工作原理: 最近使用优先: LRU算法基于这样的思想:最近被使用的数据很可能在短时间内还会被使用,因此保留这些数据有助于提高缓…

linux bash shell的getopt以及函数用法小记

getopt 长选项 短选项 可选参数whilecaseifbasename函数变量shiftread 实现功能描述&#xff1a; 1. 实现可选参数传入 -c 或 --clearBuild。 2. 用shell脚本来实现选择&#xff0c;make时是否clean。 3. 可以打印用法帮助 和 作者信息。 #!/bin/bash# sh函数定义 *******…

vue3 实现上传图片裁剪

在线的例子以及代码&#xff0c;请点击访问链接

实力上榜!安全狗入选《CCSIP 2023中国网络安全行业业全景册(第六版)》多个细项

1月24日&#xff0c;Freebuf发布了《CCSIP 2023中国网络安全行业业全景册&#xff08;第六版&#xff09;》。 作为国内云原生安全领导厂商&#xff0c;安全狗也入选多个细分领域。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;创办于2013年&…

学习gin框架知识的小注意点

Gin框架的初始化 有些项目中 初始化gin框架写的是&#xff1a; r : gin.New() r.Use(logger.GinLogger(), logger.GinRecovery(true)) 而不是r : gin.Default() 为什么呢&#xff1f; 点击进入Default源码发现其实他也是new两个中间件&#xff0c;&#xff08;Logger&…

【并发编程】锁死的问题——如何解决?以及如何避免?

目录 1.如何解决 一、死锁的定义和原因 1.1 定义 1.2 原因 二、常见的死锁场景 2.1 线程间相互等待资源 2.2 嵌套锁的循环等待 2.3 对资源的有序请求 三、死锁排查的方法 3.1 使用jstack命令 3.2 使用jconsole 3.3 使用VisualVM 四、常见的解决方案 4.1 避免嵌套锁…

深入研究C语言数组:高级技巧和性能优化的探索

在前文中&#xff0c;我们介绍了C语言数组的基本概念、多维数组的使用以及作为函数参数的传递方式。本文将进一步探索C语言数组的高级用法和性能优化技巧&#xff0c;帮助读者更深入地理解和运用数组。 动态数组 C语言中&#xff0c;数组的大小在创建时就被确定了&#xff0c…

STK姿态分析(一)矢量组件

文章目录 内容简介一、卫星矢量二、卫星坐标平面三、卫星姿态球面 – 内容简介 接下来一系列文章将进行STK目标&#xff08;卫星、导弹、火箭、飞机、船舶&#xff09;姿态分析的仿真。本篇将使用矢量&#xff08;vector&#xff09;组件对卫星姿态、传感器指向等进行3D可视化…

注册表学习——注册表结构

简介&#xff1a;注册表是由很多项和值构成的。 HEKY_USERS&#xff08;HKU&#xff09; 主要保存默认用户及当前登录用户配置信息。 .DEFAULT 该项是针对未来创建的新用户所保存的默认配置项。 S-1-5-18等项 这些项叫作安全标识符&#xff08;SID&#xff09;用来表示Windows操…

Maven 跳过test 进行 package

在使用Maven构建项目时&#xff0c;如果你想要跳过测试阶段&#xff08;test phase&#xff09;并直接打包&#xff08;package&#xff09;&#xff0c;你可以在命令行中使用特定的Maven命令选项。以下是一些常用的命令和选项&#xff1a; 1. 使用-DskipTests选项&#xff1a…

Linux(linux版本 centos 7) 下安装 oracle 19c详细教程(新手小白易上手)

一、安装前准备 1、下载预安装包 wget http://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm预安装包下载成功 2、下载oracle安装包 下载地址如下 https://www.oracle.com/cn/database/technologies…