【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针测试
目录
前言
Tessy 如何进行打桩操作
普通桩
高级桩
手写桩
Tessy单元测试之指针相关测试注意事项
有类型的指针(非函数指针):
有类型的函数指针:
void 类型的指针:
结语
前言
进行单元测试之后,但凡稍微复杂一些的软件都难以避免需要在设置中遇到桩函数,今天就来记录一下如何在TESSY中使用桩函数。
首先介绍一下什么是桩函数:
桩函数(Stub)是模拟被测试模块所调用的模块。
桩,或称桩代码,是指用来代替关联代码或者未实现代码的代码。如果函数B用B1来代替,那么,B称为原函数,B1称为桩函数。打桩就是编写或生成桩代码。
Tessy 如何进行打桩操作
在tessy里如何给外部函数进行打桩呢?
首先需要按照正常流程进行分析函数,函数分析没有问题之后再打开TIE,这里可以看到函数里有用到的外部函数,内圈是白色说明该函数虽然使用到了,但是却没有打桩,如果返回值是void型,直接右击点击 Create Stub (for current Testobject),如果返回值非void型,需要右键点击 Create advanced Stub(for current Testobject)
要注意的是, Create Stub 之后不需要设置passing和target passing,Create Advanced Stub 之后需要设置passing和target passing,默认的passing和target passing很可能不正确。
普通桩
1)函数没有返回值没有形参,可以打普通桩
2) 如果函数不影响后续实现以及变量,可以打普通桩
3) 如果函数本身有返回值但并不使用,可以打普通桩
4) 函数有形参,但不观测可以打普通桩
例如:
extern void STUB_1();
extern hirain_u8 STUB_2();
static hirain_u8 STUB_3(hairain_u8 temp){return temp*temp;};void test_fun_stub_1(void){STUB_1();}
STUB_1()
在当前 c 文件中没有定义,直接执行会报未定义错误
要对该函数打普通桩
高级桩
1) 如果用到函数返回值,需要打高级桩,手动控制其返回值
2) 如果函数有形参,并且需要接口传参检测,需要打高级桩
extern void STUB_1();
extern hirain_u8 STUB_2();
static hirain_u8 STUB_3(hairain_u8 temp){return temp*temp;};hirain_u8 test_fun_stub_2(void){hirain_u8 temp = STUB_2();return temp;}
被测函数中用到了STUB_ 2 函数的返回值, 打普通桩 会报以下错误:
所以需要打高级桩,在TDE 界面中设置函数调用预期返回值。
例如:
extern void STUB_1();
extern hirain_u8 STUB_2();
static hirain_u8 STUB_3(hairain_u8 temp){return temp*temp;};hirain_u8 test_fun_stub_4(hirain_u8 temp){hirain_u8 trm = STUB_3(temp);return tem;}
对STUB_3() 函数进行传参检测,需要给该函数打高级桩,第一个接口为返回值,
其余 为形参接口
手写桩
如果需要让桩函数有额外的功能(传参检测、局部数据处理、多传参检测、函数
实现变更等) 可以进行手写桩:
hirain_u8 loop_test3(hirain_u8 temp){for(hirain_u8 i = 0;i<temp;i++){STUB_3(i);}return 1;
}
想要获取每次函数被调用获取的值,可以创建普通桩,新建变量,然后手写桩函
数完成传参记录。
Tessy单元测试之指针相关测试注意事项
有类型的指针(非函数指针):
构建 合适 的对象 ,将地址传入指针接口。
例如:
hirain_u8 a;
void TS_FUN_PON_2(hirain_u8 *p,STR *pl)
{a = *p;pl->str2 = pl->strl;}
首先进入TIE界面查看passing 和target passing,不能设置的有冲突
接着回到TED,选择需要赋值的指针,在表格处右键 Create Pointer Target Value
创建完指针变量之后需要在 Dynamics里给指针变量赋值
有类型的函数指针:
构建与指针类型相同的函数对象,将地址传入指针接口
在 Declarations /Definition 模块写函数的声明和定义 。
例如:
hirain_u32(*T_pon)(hirain_u32 i);
hirain_u32 hirain_stuv(hirain_u32 temp){temp = (*T_pon)(temp);return temp;
}
void 类型的指针:
需要新建一个有类型的全局变量,然后将指针 指向该变量,
将变量地址传入指针接口。
例如:
hirain_u8 TS_FUN_PON_1(int *p,void *p1)
{hirain_u8 temp = 0;int *temp1 = p1;a = *p;return *temp1;}
新建一个变量且命名
在TED界面赋值
结语
本文介绍了当使用Tessy对软件进行单元测试时如何打桩和指针相关测试的注意事项及操作要点,希望能给正在摸索Tessy的网友一点点启发。
相关文章:

【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针测试
目录 前言 Tessy 如何进行打桩操作 普通桩 高级桩 手写桩 Tessy单元测试之指针相关测试注意事项 有类型的指针(非函数指针): 有类型的函数指针: void 类型的指针: 结语 前言 进行单元测试之后,但凡…...

关系型数据库-SQLite介绍
优点: 1>sqlite占用的内存和cpu资源较少 2>源代码开源,完全免费 3>检索速度上十几兆、几十兆的数据库sqlite很快,但是上G的时候最慢 4>管理简单,几乎无需管理。灵巧、快速和可靠性高 5>功能简…...

使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面xsync
目录 1,功能2,注意点3,shell脚本介绍4,bash内容 1,功能 使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面。 2,注意点 需要修改的地方:hadoop250 hadoop251 hadoop252 hadoop253 hado…...

OpenGL学习(二)绘制三维图形 固定管线
一.简单步骤 考虑顶点数据上色旋转 二.完整代码 myopenglwidget.h // An highlighted block #ifndef MYOPENGLWIDGET_H #define MYOPENGLWIDGET_H #include <QOpenGLWidget> #include <QOpenGLFunctions> #include <QOpenGLShaderProgram> #include <Q…...

微信小程序游戏:移动游戏市场的新兴力量
随着移动互联网的迅猛发展,微信小程序游戏已经成为现代数字娱乐领域的一股不可忽视的力量。这些游戏通过融入微信这一广泛使用的社交平台,为用户带来了全新的游戏体验。本文探讨了微信小程序游戏的特点、发展现状和未来趋势。 微信小程序游戏最大的特点之…...

Netflix Mac(奈飞客户端)激活版软件介绍
Netflix Mac(奈飞客户端)是一款流行的视频播放软件,专为Mac用户设计。它提供了大量的高质量电影、电视剧、纪录片和动画片资源,让用户可以随时随地观看自己喜欢的内容。 首先,Netflix Mac(奈飞客户端)以其简洁直观的用户界面而闻名。用户可以…...

【Docker】进阶之路:(十)Docker日志管理
【Docker】进阶之路:(十)Docker日志管理 查看引擎日志查看容器日志清理容器日志日志驱动程序日志驱动程序概述local日志驱动json-file 日志驱动syslog 日志驱动日志驱动的选择 Docker 容器日志分为两类:引擎日志和容器日志。Docke…...

Lcss算法介绍与应用演示
Lcss算法介绍 LCSS(最长公共子序列,Longest Common Subsequence)算法是一种用于比较两个序列相似度的方法。它寻找两个序列中的最长子序列,这个子序列不需要在原始序列中连续,但必须保持原有序列中元素的相对顺序。LC…...

【SpringBoot】从入门到精通的快速开发指南
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《SpringBoot》。🎯🎯 &…...

每日一练【长度最小的子数组】
一、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 二、题目解析 经…...

HTML 块级元素与行内元素有哪些以及注意、总结
行内元素和块级元素是HTML中的两种元素类型,它们在页面中的显示方式和行为有所不同。 块级元素(Block-level Elements): 常见的块级元素有div、p、h1-h6、ul、ol、li、table、form等。 块级元素会独占一行,即使没有…...

SpringBoot热部署
SpringBoot热部署 借鉴链接🔗:SpringBoot中的热部署 添加devtools依赖和pom插件 <!-- devtools 依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId&…...

Jmeter入门
一、下载jmeter 官网下载 下载之后解压,在目录/bin下面找到jmeter.bat双击之后即可启动Jmeter。 二、使用 如下左图,选择语言为中文,可以修改测试计划的名称。如下右图,添加线程组 添加线程组 添加http请求 路径传参方式 …...

go集成nacos
1,go集成nacos 注册实例与注销实例 package mainimport ("fmt""github.com/nacos-group/nacos-sdk-go/clients""github.com/nacos-group/nacos-sdk-go/clients/naming_client""github.com/nacos-group/nacos-sdk-go/common/constant"…...

NLP项目实战01--电影评论分类
介绍: 欢迎来到本篇文章!在这里,我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言,我们将关注情感分析任务,即通过分析电影评论的情感来判断评论是正面的、负面的。 展示: 训练展示如下…...

Linux vmstat命令:监控系统资源
vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。此命令的基本格式有如下 2 种: [rootlocalhost ~]# vmstat [-a…...

php爬虫规则与robots.txt讲解
在进行网页爬虫时,有一些规则需要遵守,以避免违反法律,侵犯网站隐私和版权,以及造成不必要的麻烦。以下是一些常见的PHP爬虫规则: 1. 尊重网站的使用条款:在开始爬取之前,请确保你阅读并理解了…...

Ray使用备注
Ray使用备注 框架介绍 Ray是一种python分布式任务调度框架其支持 无状态的任务并发执行,也支持 有状态的任务按照一定顺序执行其支持 分布式调度器,在一个节点上创建的任务先给本节点的局部调度器,并让本节点自己处理,当资源不够时,再将任务发给全局调度器供其他节点处理其支…...

个人介绍以及毕业去向
CSDN陪伴我从大一到大四,后面也会接着用 写一点大学四年的总结 #总结#理工科#留学 211大学 弃保出国 智能科学与技术 均分88.9 EI论文一篇 数学竞赛和数学建模均为省二 大创评为国家级 全国大学生计算机设计大赛国家三等奖 百度Paddle、大疆RoboMaster、Phytium Te…...

原创度检测,在线文章原创度检测
原创度检测,作为数字时代中内容创作者和学术界广泛关注的话题,正逐渐成为保障知识产权、促进创新发展的不可或缺的工具。今天,我们将深入介绍原创度检测的定义、意义、技术原理、应用领域以及未来趋势。 一、什么是原创度检测? 原…...

windows下安装git中文版客户端
下载git Windows客户端 git客户端下载地址:Git - Downloads 我这里下载的是Git-2.14.0-64-bit.exe版本 下载TortoiseGit TortoiseGit客户端下载地址:Download – TortoiseGit – Windows Shell Interface to Git TortoiseGit客户端要下载两个&#…...

短视频怎么批量添加水印logo
在现代数字化时代,视频内容已经成为我们日常生活中不可或缺的一部分。然而,当我们辛辛苦苦制作的视频在网络上分享时,常常会遇到被他人盗用或未经授权使用的情况。为了保护我们的创作成果,给视频添加水印logo成为了一种常见的手段…...

一文入门 UUID
UUID简介 UUID代表Universally Unique Identifier,译为全局一标识符。它是一种由软件构建的标准化身份验证方案,用于确保跨多个上下文中的对象都具有唯一性。UUID在各种系统之间确保了严格的唯一性,因此即使在大型分布式环境中,也…...

kafka学习笔记--broker工作流程、重要参数
本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…...

多合一iPhone 解锁工具:iMyFone LockWiper iOS
多合一iPhone 解锁工具 无需密码解锁 iPhone/iPad/iPod touch 上所有类型的屏幕锁定 在几分钟内解锁 iPhone Apple ID、Touch ID 和 Face ID 立即绕过 MDM 并删除 iPhone/iPad/iPod touch 上的 MDM 配置文件 支持所有 iOS 版本和设备,包括最新的 iOS 17 和 iPhone 1…...

在设计和考虑建造室外雨水收集池时需要注意的因素
在设计和建造室外雨水收集池时,需要考虑以下因素: 地质条件:建造雨水收集池需要考虑到地质条件,例如土壤类型、地基承载能力等。这些因素可能对水池的建造和结构产生影响。 气候条件:不同地区的降雨量、湿度、气温等…...

C_5练习题答案
一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 下列叙述中错误的是(D)。A.计算机不能直接执行用C语言编写的源程序 B.C程序经C编译程序编译后,生成扩展名为obj的文件是一个二…...

使用 Axios 进行网络请求的全面指南
使用 Axios 进行网络请求的全面指南 本文将向您介绍如何使用 Axios 进行网络请求。通过分步指南和示例代码,您将学习如何使用 Axios 库在前端应用程序中发送 GET、POST、PUT 和 DELETE 请求,并处理响应数据和错误。 准备工作 在开始之前,请…...

已解决java.lang.exceptionininitializererror异常的正确解决方法,亲测有效!!!
已解决java.lang.exceptionininitializererror异常的正确解决方法,亲测有效!!! 文章目录 报错问题解决思路解决方法交流 报错问题 java.lang.exceptionininitializererror 解决思路 java.lang.ExceptionInInitializerError 是一…...

深度学习 Day10——T10数据增强
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言一、我的环境二、代码实现与执行结果1.引入库2.设置GPU(如果使用的是CPU可以忽略这步)3.导入数据4.查…...