【回眸】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的网友一点点启发。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Proteus仿真】【51单片机】电子门铃设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使共阴数码管&#xff0c;按键、无源蜂鸣器等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管默认显示第一种门铃音调&#xff0c;可通过K1键切…

对不起,必须放弃SQL!

尽管SQL很受欢迎&#xff0c;也很成功&#xff0c;但它又总是充斥着种种矛盾。 SQL可能笨拙又冗长&#xff0c;但开发人员又经常发现它往往是他们提取所需数据的最简单直接的方法。当查询写入正确时&#xff0c;它可以快如闪电&#xff0c;当查询出错时&#xff0c;它就会慢如…

LeetCode(62)删除排序链表中的重复元素 II【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 删除排序链表中的重复元素 II 1.题目 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1…

像素、分辨率、频率、精度、延迟,关于光学动作捕捉镜头参数的那些事

精准度、分辨率、频率、延迟等参数是影响光学动作捕捉效果和还原度的关键因素。下面逐一介绍NOKOV度量动作捕捉系统的基础参数。 NOKOV度量动作捕捉系统的核心产品是光学动作捕捉镜头&#xff0c;用于捕捉被测物表面反光标记点的三维坐标数据。 从表中可以看到&#xff0c;不同…

Python自动化测试(unittest框架)

一、什么是框架 框架是由大佬开发或者专业的研发团队研发的技术骨架&#xff0c;框架是一个半成品&#xff0c;框架是对常用的功能&#xff0c;基础的代码进行封装的一个工具&#xff0c;这个工具对外提供了一些API&#xff0c;其他的开发者只需要调用框架的接口即可&#xff…

Windows进程机制

进程 进程要做任何事情&#xff0c;必须让一个线程在它的上下文运行。该线程负责执行进程地址空间包含的代码。每个进程至少要有一个线程来执行进程地址空间包含的代码。当系统创建一个进程的时候&#xff0c;会自动为进程创建第一个线程&#xff0c;这称为主线程&#xff08;…

word文档怎么压缩?超级好用!

当Word文档体积过大时&#xff0c;会遇到传输慢、无法上传等问题&#xff0c;这时候可以通过压缩软件、压缩图片等方式减小Word文档体积&#xff0c;下面就一起来看下具体的操作方法吧。 方法一&#xff1a;嗨格式压缩大师 嗨格式压缩大师是一个专业的压缩软件&#xff0c;可以…

分享10个国内免费的AI绘画工具

谈到 AI 绘画&#xff0c;许多人会联想到 Midjourney、Stable Diffusion、DALLE2 等国外的知名绘画工具。 然而&#xff0c;这些国外的 AI 绘画工具大部分都是付费的&#xff0c;并且需要借助科学上网才能使用。这两个条件让许多人望而却步。 考虑到很多人无法进行科学上网&a…

绿色视角下的高校校园建设及能耗管理

摘 要&#xff1a;2019年住建部发布了《绿色校园评价标准》(GB/T51356—2019)&#xff0c;将创建绿色校园提上了日程。绿色校园建设的目标是践行绿色发展理念&#xff0c;建立生态文明教育工作长效机制。创建绿色校园要从政府、社会、学校三个层面来实施&#xff0c;以加快高校…

【Spring Boot】Starter机制的使用及案例

一、引言 1、什么是SpringBoot Starter SpringBoot中的starter是一种非常重要的机制(自动化配置)&#xff0c;能够抛弃以前繁杂的配置&#xff0c;将其统一集成进starter&#xff0c;应用者只需要在maven中引入starter依赖&#xff0c;SpringBoot就能自动扫描到要加载的信息并启…

【MIMO 从入门到精通】[P3]【Channel Estimation】

前言&#xff1a; MIMO 是无线通讯里面的核心技术之一.这里面主要参考 《Quick Introduction to MIMO Channel Estimation》 Professor and an IEEE Fellow&#xff1a;Iain 讲解一下 MIMO &#xff08;multiple transmit antennas and multiple receivers&#xff09;里面的信…

电脑出现错误0x80004005怎么解决,解决0x80004005的问题

当电脑出现0x80004005错误时&#xff0c;通常是由于系统或应用程序之间的通信问题或文件系统损坏引起的。该错误代码表示未指定错误&#xff0c;在Windows系统中较为常见。 一.解决0x80004005错误的步骤 重新启动电脑 有时候&#xff0c;错误只是一个暂时的问题&#xff0c;重…

后端项目操作数据库-中枢组件Service调用Mapper实现增删改查-实例

接上篇 使用MyBatis配置Mapper实现增删改查 1.Service的基本作用 Service在代码中的的作用是调用Mapper、被Controller调用。是后端项目中非常重要的组件。 用于设计业务流程、业务逻辑&#xff0c;以保障数据的完整性、有效性、安全性。 2. Service使用举例——“添加相册”…

MyBatis的逆向工程

MyBatis的逆向工程 正向工程&#xff1a;先创建Java实体类&#xff0c;由框架负责根据实体类生成数据库表。 Hibernate是支持正向工 程的 逆向工程&#xff1a;先创建数据库表&#xff0c;由框架负责根据数据库表&#xff0c;反向生成如下资源&#xff1a; Java实体类 Mapp…

【Trino权威指南(第二版)】Trino的架构、trino架构组件、 trino连接器架构的细节、trino的查询执行模型

文章目录 一. Trino架构1. 架构概览2. 协调器3. 发现服务4. 工作节点 二. 基于连接器的架构三. 查询执行模型1. 解析—>查询计划2. 查询计划 —> 分布式查询计划3. 运行阶段3.1. 基础概念切片&#xff1a;并行单元page 与 exchange算子pipeline切片的driverOperator 3.2.…

Python高级算法——线性规划(Linear Programming)

Python中的线性规划&#xff08;Linear Programming&#xff09;&#xff1a;高级算法解析 线性规划是一种数学优化方法&#xff0c;用于求解线性目标函数在线性约束条件下的最优解。它在运筹学、经济学、工程等领域得到广泛应用。本文将深入讲解Python中的线性规划&#xff0…

连续型随机变量的概率密度

如果对于随机变量的分布函数&#xff0c;存在非负可积函数&#xff0c;使得对于任意实数&#xff0c;有&#xff1a; 那么就称为连续型随机变量&#xff0c;称为的概率密度函数&#xff0c;简称密度函数。

微信小程序合集更更更之实现雪花随机飘落

实现效果 写在最后&#x1f352; 更多相关内容&#xff0c;关注&#x1f365;苏苏的bug&#xff0c;&#x1f361;苏苏的github&#xff0c;&#x1f36a;苏苏的码云~

为MES实施建立成功的团队:应对挑战并确保成功

前言 实施MES是一个复杂且具有挑战性的过程&#xff0c;需要协调良好的团队共同努力。 为了取得成功&#xff0c;建立一支具有专业技能、专业知识和共同愿景的团队组合成为致胜的关键。本文将探讨组建MES团队的关键要素&#xff0c;例如&#xff1a; 确定关键利益相关者和决策…

产品经理之Axure的元件库使用详细案例

⭐⭐ 产品经理专栏&#xff1a;产品专栏 ⭐⭐ 个人主页&#xff1a;个人主页 ​ 目录 前言 一.Axure的元件库的使用 1.1 元件介绍 1.2 基本元件的使用 1.2.1 矩形、按钮、标题的使用 1.2.2 图片及热区的使用 1.3 表单元件及表格元件的使用 1.3.1表单元件的使用 1.3.…