@Test Annotation属性- dependsOnMethods属性

目录

语法

如果test1()失败了怎么办?test2()测试会发生什么,因为它依赖于test1?

如果我们在test1()方法上不使用@Test注释,但在test 2()测试用例上仍然使用@Test(dependsOnMethod =“test1”),会怎么样?

如果我们在dependsOnMethods属性中传递一个方法列表会怎么样?他们的处决有命令吗?

如何在属于不同类的测试用例上使用dependsOnMethods?


本文将详细讨论@Test注释的dependsOnMethods属性。

这个属性有什么作用?dependsOnMethods属性的用途是什么?dependsOnMethods用于依赖于另一个测试用例执行的测试用例。因此,后一个测试用例将首先执行,因为它的执行对于运行依赖于它的用例是必要的。

语法

dependsOnMethod属性将接受一个字符串数组,如{“test1”,“test 2”},如果一个测试只依赖于另一个测试,你也可以传递“test1”。所以,它会像下面这样-

@Test(dependsOnMethod = {"test1","test2"})   // if depends on one or more tests
@Test(dependsOnMethod = "test1")   // if your test depends on only one other test

现在,让我们看一些关于如何在测试中使用dependsOnMethods的代码-

import org.testng.Assert;
import org.testng.annotations.Test;public class CodekruTest {@Test // this test will run firstpublic void test1() {System.out.println("test1 is passed");Assert.assertTrue(true);}@Test(dependsOnMethods = "test1") public void test2() {System.out.println("test2 is passed");Assert.assertTrue(true);}}

产出-

test1 is passed
test2 is passed
PASSED: test1
PASSED: test2===============================================Default testTests run: 2, Failures: 0, Skips: 0
===============================================

在这里,您可以看到首先执行test1(),然后执行test2()。现在,让我们玩一些事情,因为许多紧迫的问题仍然没有答案。

  • 如果test1()失败了怎么办?test2()测试会发生什么,因为它依赖于test1?
  • 如果我们在test1()方法上不使用@Test注释,但在test 2()测试用例上仍然使用@Test(dependsOnMethod =“test1”),会怎么样?
  • 如果我们在dependsOnMethods属性中传递一个方法列表会怎么样?他们的处决有命令吗?
  • 如何在属于不同类的测试用例上使用dependsOnMethods? 
如果test1()失败了怎么办?test2()测试会发生什么,因为它依赖于test1?

在这种情况下,test 2()将被跳过,不会运行。我们来看看这个的实际效果-

import org.testng.Assert;
import org.testng.annotations.Test;public class CodekruTest {@Testpublic void test1() {System.out.println("test1 is passed");Assert.assertTrue(false); // failing the condition here}@Test(dependsOnMethods = "test1") // now this test won't run as test1 failedpublic void test2() {System.out.println("test2 is passed");Assert.assertTrue(true);}}

产出-

test1 is passed
FAILED: test1
java.lang.AssertionError: expected [true] but found [false]at org.testng.Assert.fail(Assert.java:96)at org.testng.Assert.failNotEquals(Assert.java:776)at org.testng.Assert.assertTrue(Assert.java:44)at org.testng.Assert.assertTrue(Assert.java:54)at Test.CodekruTest.test1(CodekruTest.java:12)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:564)at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)at org.testng.TestRunner.privateRun(TestRunner.java:648)at org.testng.TestRunner.run(TestRunner.java:505)at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)at org.testng.SuiteRunner.run(SuiteRunner.java:364)at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)at org.testng.TestNG.runSuites(TestNG.java:1049)at org.testng.TestNG.run(TestNG.java:1017)at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)SKIPPED: test2
java.lang.Throwable: Method CodekruTest.test2()[pri:0, instance:Test.CodekruTest@27508c5d] depends on not successfully finished methodsat org.testng.internal.Invoker.invokeTestMethods(Invoker.java:888)at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)at org.testng.TestRunner.privateRun(TestRunner.java:648)at org.testng.TestRunner.run(TestRunner.java:505)at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)at org.testng.SuiteRunner.run(SuiteRunner.java:364)at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)at org.testng.TestNG.runSuites(TestNG.java:1049)at org.testng.TestNG.run(TestNG.java:1017)at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)===============================================Default testTests run: 2, Failures: 1, Skips: 1
===============================================

如果我们在test1()方法上不使用@Test注释,但在test 2()测试用例上仍然使用@Test(dependsOnMethod =“test1”),会怎么样?

它将抛出一个错误,并且任何一个测试用例都不会运行,如下所示-

import org.testng.Assert;
import org.testng.annotations.Test;public class CodekruTest {public void test1() {System.out.println("test1 is passed");Assert.assertTrue(true);}@Test(dependsOnMethods = "test1")public void test2() {System.out.println("test2 is passed");Assert.assertTrue(true);}}

产出-

org.testng.TestNGException: 
Test.CodekruTest.test2() is depending on method public void Test.CodekruTest.test1(), which is not annotated with @Test or not included.at org.testng.internal.MethodHelper.findDependedUponMethods(MethodHelper.java:123)at org.testng.internal.MethodHelper.topologicalSort(MethodHelper.java:266)at org.testng.internal.MethodHelper.sortMethods(MethodHelper.java:376)at org.testng.internal.MethodHelper.collectAndOrderMethods(MethodHelper.java:65)at org.testng.TestRunner.initMethods(TestRunner.java:438)at org.testng.TestRunner.init(TestRunner.java:271)at org.testng.TestRunner.init(TestRunner.java:241)at org.testng.TestRunner.<init>(TestRunner.java:192)at org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33)at org.testng.remote.support.RemoteTestNG6_12$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_12.java:66)at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:713)at org.testng.SuiteRunner.init(SuiteRunner.java:260)at org.testng.SuiteRunner.<init>(SuiteRunner.java:198)at org.testng.TestNG.createSuiteRunner(TestNG.java:1295)at org.testng.TestNG.createSuiteRunners(TestNG.java:1273)at org.testng.TestNG.runSuitesLocally(TestNG.java:1128)at org.testng.TestNG.runSuites(TestNG.java:1049)at org.testng.TestNG.run(TestNG.java:1017)at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
如果我们在dependsOnMethods属性中传递一个方法列表会怎么样?他们的处决有命令吗?

不,没有测试的执行顺序,所以,如果我们通过一个测试列表,如@Test(dependsOnMethods = {“test1″,“test 2”}). TestNG可以先执行test1或test 2,但可以保证它们将在使用dependsOnMethods属性的测试方法之前运行。

如何在属于不同类的测试用例上使用dependsOnMethods?

我们可以通过在dependsOnMethods属性中给出方法名的完整路径来实现。让我们创建两个不同的类,CodekruTestFirst和CodekruTestSecond,每个类都有自己的测试用例。CodekruTestFirst的测试用例依赖于CodekruTestSecond的测试用例。

dependsOnMethods project structure

CodekruTestFirst.java

import org.testng.Assert;
import org.testng.annotations.Test;public class CodekruTestFirst {@Test()public void testFirst() {System.out.println("Excecuting test method in CodekruTestFirst class");Assert.assertTrue(true);}}

CodekruTestSecond.java

import org.testng.Assert;
import org.testng.annotations.Test;public class CodekruTestSecond {@Test(dependsOnMethods = "Demo.CodekruTestFirst.testFirst")public void testSecond() {System.out.println("Excecuting test method in CodekruTestSecond class");Assert.assertTrue(true);}} 

我们现在将运行CodekruTestSecond类,并且CodekruTestFirst中的测试用例也将被执行,因为testSecond()方法依赖于它。

产出-

Excecuting test method in CodekruTestFirst class
Excecuting test method in CodekruTestSecond class===============================================
codekru
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0

 注意事项: 依赖方法和依赖方法必须具有不同的名称。否则,您将遇到错误。

public class CodekruTestFirst {@Testpublic void test() {System.out.println("Excecuting test method in CodekruTestFirst class");Assert.assertTrue(true);}}
public class CodekruTestSecond {@Test(dependsOnMethods = "Demo.CodekruTestFirst.test")public void test() {System.out.println("Excecuting test method in CodekruTestSecond class");Assert.assertTrue(true);}}

现在,当我们运行CodekruTestSecond类时,我们会得到下面的错误。


org.testng.TestNGException: 
The following methods have cyclic dependencies:
CodekruTestSecond.test()[pri:0, instance:Demo.CodekruTestSecond@236e3f4e]at org.testng.internal.Graph.topologicalSort(Graph.java:128)at org.testng.internal.MethodHelper.topologicalSort(MethodHelper.java:299)at org.testng.internal.MethodHelper.sortMethods(MethodHelper.java:382)at org.testng.internal.MethodHelper.collectAndOrderMethods(MethodHelper.java:71)at org.testng.TestRunner.initMethods(TestRunner.java:517)at org.testng.TestRunner.init(TestRunner.java:336)at org.testng.TestRunner.init(TestRunner.java:289)at org.testng.TestRunner.<init>(TestRunner.java:220)at org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33)at org.testng.remote.support.RemoteTestNG6_12$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_12.java:66)at org.testng.ITestRunnerFactory.newTestRunner(ITestRunnerFactory.java:55)at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:676)at org.testng.SuiteRunner.init(SuiteRunner.java:178)at org.testng.SuiteRunner.<init>(SuiteRunner.java:112)at org.testng.TestNG.createSuiteRunner(TestNG.java:1306)at org.testng.TestNG.createSuiteRunners(TestNG.java:1282)at org.testng.TestNG.runSuitesLocally(TestNG.java:1131)at org.testng.TestNG.runSuites(TestNG.java:1069)at org.testng.TestNG.run(TestNG.java:1037)at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

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

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

相关文章

【产业实践】使用YOLO V5 训练自有数据集,并且在C# Winform上通过onnx模块进行预测全流程打通

使用YOLO V5 训练自有数据集,并且在C# Winform上通过onnx模块进行预测全流程打通 效果图 背景介绍 当谈到目标检测算法时,YOLO(You Only Look Once)系列算法是一个备受关注的领域。YOLO通过将目标检测任务转化为一个回归问题,实现了快速且准确的目标检测。以下是YOLO的基…

B2119 删除单词后缀

网址如下&#xff1a; B2119 删除单词后缀 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 算是找了个操作字符串的题来做 可以说C的string类确实是好用&#xff0c;但是还是不够熟悉&#xff0c;我不清楚怎么删去string类的后面几个字符 用C的常规做法是在相应地点设\0&…

校园二手交易小程序|基于微信小程序的闲置物品交易平台设计与实现(源码+数据库+文档)

校园二手交易小程序目录 目录 基于微信小程序的闲置物品交易平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕…

R语言基础学习-02 (此语言用途小众 用于数学 生物领域 基因分析)

变量 R 语言的有效的变量名称由字母&#xff0c;数字以及点号 . 或下划线 _ 组成。 变量名称以字母或点开头。 变量名是否正确原因var_name2.正确字符开头&#xff0c;并由字母、数字、下划线和点号组成var_name%错误% 是非法字符2var_name错误不能数字开头 .var_name, var.…

蓝桥杯备战——11.NE555测频

1.分析原理图 我们可以看到&#xff0c;上图就是一个NE555构建的方波发生电路&#xff0c;输出方波频率1.44/2(R8Rb3)C,如果有不懂NE555内部结构&#xff0c;工作原理的&#xff0c;可以到B站学习。实在不懂仿真也行&#xff0c;比如我下面就是仿真结果&#xff1a; 然后就是下…

与数组相关经典面试题

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

su导入3d模型为什么不圆滑---模大狮模型网

在将SU(SketchUp)模型导入到其他3D软件中时&#xff0c;可能会遇到模型没有圆滑的情况。这可能是由于以下原因&#xff1a; 模型导出设置不正确&#xff1a;在导出SU模型时&#xff0c;需要确保正确选择导出设置。例如&#xff0c;在导出为.obj格式时&#xff0c;需要选择正确的…

免费的ChatGPT网站 ( 7个 )

ChatGPT的核心功能是基于用户在输入时的语言或文本生成相应的回复或继续内容。此外&#xff0c;它还能够完成多种任务&#xff0c;如撰写邮件、视频脚本、文案、翻译、代码编写以及撰写论文等。 博主归纳总结了7个国内非常好用&#xff0c;而且免费的chatGPT网站&#xff0c;AI…

Unity 访问者模式(实例详解)

文章目录 实例1&#xff1a;简单的形状与统计访客实例2&#xff1a;游戏对象组件访问者实例4&#xff1a;Unity场景对象遍历与清理访客实例5&#xff1a;角色行为树访问者 访问者模式&#xff08;Visitor Pattern&#xff09;在Unity中主要用于封装对一个对象结构中各个元素的操…

VS之调用程序对DLL中全局变量的使用

接上篇《VS生成C动态链接库DLL》&#xff0c;能够生成DLL&#xff0c;且能调用后&#xff0c;遇到一个问题&#xff0c;即在DLL程序中定义了一些全局变量&#xff0c;应用程序需要使用&#xff0c;本以为可以直接使用&#xff0c;没想到&#xff0c;还是需要设置才可以&#xf…

秦始皇帝陵K0007陪葬坑文物展览与文物预防性保护的璀璨交汇

秦始皇帝陵博物院近日迎来了一场引人注目的展览——“何止秦俑——秦陵苑囿之K0007陪葬坑”。此次展览首次集中展示了K0007陪葬坑出土的别具一格的陶俑、鲜活灵动的青铜水禽等珍贵文物。然而&#xff0c;这些文物的安全展出离不开高科技的监测平台与实时终端的24小时不间断保护…

搜维尔科技:第九届元宇宙数字人大赛,参赛小组报名确认公告!

各位参赛选手大家好&#xff0c;近期已收到新增报名信息如下表&#xff0c;请各位参赛选手确认&#xff0c;如果信息有误或信息不完整请电话联系赛务组工作人员进行更正 随着元宇宙时代的来临&#xff0c;数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划…

Asp.net移除Server, X-Powered-By, 和X-AspNet-Version头

移除X-AspNet-Version很简单,只需要在Web.config中增加这个配置节: <httpRuntime enableVersionHeader"false" />移除Server在Global.asax文件总增加&#xff1a; //隐藏IIS版本 protected void Application_PreSendRequestHeaders() {HttpContext.Current.Res…

熟悉MATLAB 环境

一、问题描述 熟悉MATLAB 环境。 二、实验目的 了解Matlab 的主要功能&#xff0c;熟悉Matlab 命令窗口及文件管理&#xff0c;Matlab 帮助系统。掌握命令行的输入及编辑&#xff0c;用户目录及搜索路径的配置。了解Matlab 数据的特点&#xff0c;熟悉Matlab 变量的命名规则&a…

巨人踏步,港口自动驾驶提速向前打开行业新空间

按照吞吐量排名&#xff0c;全世界最大的50个港口&#xff0c;中国占了29个。在中国的港口和码头上&#xff0c;一场进化正在发生&#xff1a;人在这个生态中占的比重越来越少&#xff0c;技术接管的要素正在越来越多。像是最具代表性的全球综合自动化程度最高的码头——上海洋…

vue-cli项目运行流程介绍

一、前言 ​ 本文介绍 vue-cli搭建的项目运行流程&#xff0c;基于已经搭建好的基础项目。关于 vue-cli 构建项目的详细流程&#xff0c;可参考博文&#xff1a;使用vue脚手架构建项目 二、main.js 项目运行 会加载入口文件 main.js /* html文件中&#xff0c;通过script …

Linux部署DataEase数据分析工具并结合内网穿透实现任意设备远程查看数据

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务…

基于STM32的云上OneNET智慧大棚(包含程序设计报告)

目录 概要 作品介绍 设计原理 设计作品结构 软件部分 概要 为了解决传统农业生产效率低下&#xff0c;消耗大量的人力物力&#xff0c;不能精确的对农作物实现监控的问题&#xff0c;从而最大限度的提高农业生产力&#xff0c;实现优质、高产、低耗、环保的可持续发展物联…

车载语音交互赛道研究:大模型揭幕2.0时代 商业模式重塑

大模型正给车载语音交互赛道带来颠覆性变革。 根据高工智能汽车研究院调研获取的信息&#xff0c;核心原因为&#xff1a;1.0时代&#xff0c;车载语音交互玩家可使用自身的小模型&#xff1b;2.0时代&#xff0c;很可能需基于通用大模型&#xff08;训练成本极为高昂&#xf…

老隋分享的人力资源RPO项目的优势究竟体现在哪呢?

在当前激烈的市场竞争中&#xff0c;企业对于高效的人力资源解决方案的需求日益增长。老隋人力资源RPO(招聘流程外包)项目凭借其独特的优势&#xff0c;成为了众多企业眼中的蓝海项目。那么&#xff0c;老隋人力资源RPO项目的优势究竟体现在哪里呢?以下几个方面将为您解答这一…