Testng测试框架(2)-测试用例@Test

测试方法用 @Test 进行注释,将类或方法标记为测试的一部分。

@Test()
public void aFastTest() {System.out.println("Fast test");
}
import org.testng.annotations.Test;public class TestExample {@Test(description = "测试用例1")public void testCase1(){System.out.println("Test Case 1");}@Test(priority = 2)public void testCase2(){System.out.println("Test Case 2");}@Test(priority = 1)public void testCase3(){System.out.println("Test Case 3");}@Testpublic void testCase4(){System.out.println("Test Case 4");throw new RuntimeException("Test Case 4 Failed");}@Test(groups = {"myGroup"})public void testCase5(){System.out.println("Test Case 5");throw new RuntimeException("Test Case 5 Failed");}@Test(enabled = false)public void testCase6(){System.out.println("Test Case 6");}@Test(dependsOnMethods = {"testCase4"},dependsOnGroups = {"myGroup"}, alwaysRun = true)public void testCase7(){System.out.println("Test Case 7");}
}

①description代表测试用例描述,控制台会打印输出该描述。
②priority代表优先级,数字越小,优先级越高,默认值为0。testCase2的priority值为2,会最后一个执行;testCase3的priority值为1,会倒数第二个执行。如果级别一样,则执行顺序默认按方法名排序。
③enabled的默认值为true,代表不启用。当enabled的值为false时,表示禁用,因此testCase6并未执行。
④testCase4和testCase5都抛出了运行时异常,因此执行失败。
⑤dependsOnMethods代表依赖一个或多个方法,dependsOnGroups代表依赖一个或多个分组。一旦被依赖的测试用例执行失败,则TestNG将跳过该测试用例。
但没有跳过testCase7,原因是testCase7加了alwaysRun方法,并将值设为true,代表始终执行,在默认情况下,该值为false。建议尽量不要使用dependsOnMethods和dependsOnGroups,因为违背了测试用例需要解耦的原则。

@Test的属性expectedExceptions

在TestNG中,@Test注解的expectedExceptions属性用于指定测试方法预期抛出的异常类型。如果测试方法执行时抛出了与expectedExceptions属性指定的异常类型相同的异常,那么测试会被认为是成功的;如果抛出了其他类型的异常或者没有抛出任何异常,那么测试会失败。

使用expectedExceptions属性的基本语法如下:

@Test(expectedExceptions = ExceptionClass.class)
public void testMethod() {// 测试逻辑,预期会抛出 ExceptionClass 类型的异常
}

其中,ExceptionClass.class应该替换为你预期测试方法会抛出的异常的具体类型。

以下是一个简单的例子:

import org.testng.annotations.Test;public class MyTestClass {@Test(expectedExceptions = NullPointerException.class)public void testThrowException() {String str = null;int length = str.length(); // 这行会抛出 NullPointerException}@Testpublic void testNoExceptionThrown() {String str = "hello";int length = str.length(); // 这行不会抛出异常}
}

在这里插入图片描述

在上面的例子中,testThrowException方法预期会抛出一个NullPointerException,因为尝试获取一个null字符串的长度。如果这个方法真的抛出了NullPointerException,那么测试就会通过。相反,testNoExceptionThrown方法不会抛出任何异常,所以它不需要(也不应该)使用expectedExceptions属性。

请注意,expectedExceptions属性只能指定一个预期的异常类型。如果你预期测试方法可能会抛出多种类型的异常,那么你需要使用更复杂的异常处理逻辑,而不是依赖expectedExceptions属性。

此外,TestNG还提供了expectedExceptionsMessage属性,用于检查抛出的异常是否具有特定的消息。这两个属性可以组合使用,以便更精确地控制测试的预期行为。

@Test(expectedExceptions = NullPointerException.class, expectedExceptionsMessage = "Cannot invoke \"String.length()\" because \"str\" is null")
public void testThrowExceptionWithMessage() {String str = null;int length = str.length(); // 这行会抛出带有特定消息的 NullPointerException
}

在这个例子中,测试不仅预期会抛出NullPointerException,还预期异常消息中包含特定的文本。

@Test的属性invocationCount

在TestNG中,@Test注解的invocationCount属性用于指定测试方法的调用次数。这允许你重复执行相同的测试方法多次,以确保测试的可靠性和稳定性。

invocationCount属性的值是一个整数,表示测试方法应该被调用的次数。每次调用都会作为单独的测试实例来执行,并且测试结果会分别记录。

下面是一个使用invocationCount属性的示例:

import org.testng.annotations.Test;public class invocationCountTest {@Test(invocationCount = 5,invocationTimeOut = 1000)public void testMethod() {// 测试逻辑// 这个方法会被调用5次System.out.println("testMethod");}
}

在上面的例子中,testMethod方法会被调用5次。每次调用都是独立的,并且测试结果会分别记录。如果其中任何一次调用失败,那么整个测试会被认为是失败的。

使用invocationCount属性可以帮助你发现那些可能在某些情况下通过,但在其他情况下失败的间歇性问题。通过重复执行测试,你可以增加捕捉到这些问题的机会。

需要注意的是,使用invocationCount属性会增加测试的执行时间,因为测试方法会被多次调用。因此,你应该谨慎使用这个属性,避免不必要的重复执行。

invocationTimeOut为超时时间。
invocationTimeOut属性用于设置测试方法每次调用的超时时间。这个属性指定了一个最大的毫秒数,用于限制测试方法单次调用的执行时间。如果测试方法在一次调用中的执行时间超过了这个设定的超时时间,那么TestNG会抛出异常,并标记该次调用为失败。

此外,invocationCount属性通常与其他TestNG属性(如dependsOnMethodspriority等)结合使用,以实现更复杂的测试执行策略。通过合理地组合这些属性,你可以构建出灵活且强大的测试套件。

@Test timeout属性

在TestNG中,@Test注解的timeout属性用于设置测试方法的超时时间。这个属性指定了一个最大的毫秒数,用于限制测试方法的执行时间。如果测试方法的执行时间超过了这个设定的超时时间,TestNG会抛出异常,并标记该测试方法为失败。

timeout属性的使用对于确保测试方法不会无限期地运行或者在执行过程中卡住是非常有用的。它可以帮助你识别那些可能由于各种原因(如外部资源不可用、无限循环等)导致执行时间过长的测试方法。

下面是一个使用timeout属性的示例:

import org.testng.annotations.Test;public class MyTestClass {@Test(timeout = 3000) // 设置超时时间为3000毫秒(即3秒)public void testMethod() {// 测试逻辑// 如果这个方法执行时间超过3秒,TestNG会抛出异常并标记测试为失败}
}

在上面的例子中,testMethod方法的执行时间被限制为3秒。如果这个方法在3秒内没有完成执行,TestNG会中断测试并标记它为失败。

需要注意的是,timeout属性是设置单个测试方法的超时时间,而不是整个测试套件或测试类的超时时间。如果你需要为整个测试套件或测试类设置超时时间,你可能需要编写自定义的逻辑或使用其他测试框架提供的功能。

此外,timeout属性的值应该根据测试方法的实际执行时间来合理设置。如果设置得太短,可能会导致一些正常但需要较长时间的测试方法被误判为失败。如果设置得太长,则可能无法有效地检测出那些执行时间过长的测试方法。因此,在设置timeout属性时,你需要根据测试方法的实际需求和预期执行时间来做出权衡。

class级别的注解

@Test不仅可以注解在测试方法上,还可以注解在类上。

@Test
public class Test1 {public void test1() {}public void test2() {}
}

类级别的@Test注解使这个类的所有公开方法称为测试方法,即使测试方法没有用@Test注解。如果想添加具体的属性,仍然可以使用@Test来注注解测试方法。

@Test
public class Test1 {public void test1() {}@Test(groups = "g1")public void test2() {}
}

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

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

相关文章

Arthas排查工具

简介 | arthas (aliyun.com) 在线安装 #下载jar包 curl -O https://arthas.aliyun.com/arthas-boot.jar#启动会先检测虚拟机进程,如果没有启动失败(idea) java -jar arthas-boot.jar linux安装与window一样 卸载arthas rm -rf ~/.arthas/ rm -rf ~/logs/arthas

Unity TextMeshProUGUI 获取文本尺寸·大小

一般使用ContentSizeFitter组件自动变更大小 API 渲染前 Vector2 GetPreferredValues(string text)Vector2 GetPreferredValues(string text, float width, float height)Vector2 GetPreferredValues(float width, float height) 渲染后 Vector2 GetRenderedValues()Vector…

【Linux】网络基础(一)

文章目录 一、计算机网络背景1. 网络发展2. 认识“协议” 二、网络协议初识1. 协议分层2. OSI七层模型3. TCP/IP五层(或四层)模型 三、网络传输基本流程1. 同局域网的两台主机通信数据包封装和分用封装分用 2. 跨网络的两台主机通信 四、网络中的地址管理…

Rockchip Android13 Vold(一):Native层

一:概述 Vold全称Volume Daemon是用于管理存储类设备的守护进程,负责接收驱动层设备挂载和卸载消息以及与Framework层之间的通信。Vold作为一个守护进程位于Android的Native Daemons层。 二:Vold框架图 三:Vold Sevice Android13的init.rc位于/system/etc/init/hw/其中使…

C语言 | Leetcode C语言题解之第24题两两交换链表中的节点

题目: 题解: struct ListNode* swapPairs(struct ListNode* head) {struct ListNode dummyHead;dummyHead.next head;struct ListNode* temp &dummyHead;while (temp->next ! NULL && temp->next->next ! NULL) {struct ListNod…

【Linux】编写并运行Shell脚本程序操作实例

关于Shell脚本的介绍: Shell脚本是一种用于自动化任务和简化常见操作的脚本语言,通常用于Linux和Unix环境中。Shell脚本允许用户通过编写一系列命令和逻辑语句来执行一系列任务,从而提高了工作效率和自动化水平。 以下是关于Shell脚本的详细…

PlanUML和Mermaid哪个好?

引言 在当今信息化快速发展的时代,数据可视化和图表工具不仅对于程序员,也对于非技术背景的人士至关重要。绘图工具可以帮助我们更好地理解和表达复杂的概念或数据流。PlantUML和Mermaid是两款被广泛使用的绘图语言,它们都能够通过简洁的文本…

测试用例的编写评审

1、什么叫软件测试用例 什么是测试用例 测试用例(TestCase) 是为项目需求而编制的一组测试输入、执行条件 以及预期结果,以便测试某个程序是否满足客户需求。–测试依据 可以总结为:每一个测试点的数据设计和步骤设计。–测试用例 2、测试用例的重要性(了解) 2.1…

航芯通用MCU技术常见问题 | F4专题

日常工作中,我们的销售或技术工程师经常会收到来自用户的问题,其中一些问题是比较常见的,所以为满足日常用户对航芯产品使用及服务的了解,航芯特此推出“通用MCU技术常见问题”专题,分为F0专题及F4专题,欢迎…

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar]

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar] https://mvnrepository.com/artifact/org.opencv/opencv 根本就没有 找了个旧项目的opencv-410.jar修改下opencv-4.10.0.jar放到目录下面就好了 D:\localRepository\org\opencv\opencv\4.10.0 OpenCV-C…

什么是态势感知?

什么是态势感知? 同学,听说过态势感知吗?啥?不知道?不知道很正常,因为态势感知是一个比较小众、比较神秘的概念。为什么态势感知很神秘,首先是因为这是来自军事情报领域的概念,然后…

python--递归算法篇

1、给定一个包含n1个整数的数组nums,其数字在1到n之间(包含1和n), 可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数 def repeat(ls:list) -> list:#把个数超过1的数&#xff0c…

使用clickhouse-backup备份和恢复数据

作者:俊达 介绍 clickhouse-backup是altinity提供的一个clickhouse数据库备份和恢复的工具,开源项目地址:https://github.com/Altinity/clickhouse-backup 功能上能满足日常数据库备份恢复的需求: 支持单表/全库备份支持备份上…

【opencv】示例-grabcut.cpp 使用OpenCV库的GrabCut算法进行图像分割

left mouse button - set rectangle SHIFTleft mouse button - set GC_FGD pixels CTRLleft mouse button - set GC_BGD pixels 这段代码是一个使用OpenCV库的GrabCut算法进行图像分割的C程序。它允许用户通过交互式方式选择图像中的一个区域,并利用GrabCut算法尝试…

Tomcat无法成功启动——双击startup.bat闪退的解决办法

一、首先查看端口是否被占用了,一般Tomcat的默认端口是8080,可以在管理员命令行通过“netstat -ano|findstr "8080”"的命令查看当前是否有进程占用了端口。 1.如果端口占用了: 则根据PID(进程id号)来查这个…

深入理解Apache ZooKeeper与Kafka的协同工作原理

目录 引言 一、ZooKeeper基础概念 (一)ZooKeeper简介 (二)ZooKeeper数据结构 (三)ZooKeeper特点 (四)应用场景 二、ZooKeeper工作模式 (一)工作机制 …

jeecg-boot安装

我看大家都挺关注,所以集中上传了下代码和相关工具,方便大家快速完成 链接:https://pan.baidu.com/s/1-Y9yHVZ-4DQFDjPBWUk4-A 提取码:op1r 1. 下载代码 下载地址 : JEECG官方网站 - 基于BPM的低代码开发平台(低代码平台_零代…

Let‘s Encrypt

创建文件夹 mkdir /usr/local/develop/ 安装Certbot客户端 yum install certbot 首先确保example.com和www.example.com这两个域名通过DNS解析绑定了你的web 服务器的公网 IP 就是说先要完成域名解析到服务器 下面命令会验证 /var/www/example 他会将一些命令文件存在…

MySQL 04-EMOJI 表情与 UTF8MB4 的故事

拓展阅读 MySQL View MySQL truncate table 与 delete 清空表的区别和坑 MySQL Ruler mysql 日常开发规范 MySQL datetime timestamp 以及如何自动更新,如何实现范围查询 MySQL 06 mysql 如何实现类似 oracle 的 merge into MySQL 05 MySQL入门教程&#xff0…

SpringBoot + Dobbo + nacos

SpringBoot Dobbo nacos 一、nacos https://nacos.io/zh-cn/docs/quick-start.html 1、下载安装包 https://github.com/alibaba/nacos/releases/下载后在主目录下,创建一个logs的文件夹:用来存日志 2、启动nacos 在bin目录下打开cmd运行启动命令&a…