当前位置: 首页 > article >正文

TESSY创建需要手写桩的测试用例

      如果需要让桩函数有额外的功能,如:传参检测、局部数据处理、多传参检测、函数实现变更等,可以进行手写桩。

     我们以tessy5.1 IDE为例,给大家展示编写一个需要手写桩的测试用例过程。

1、前期的准备工作

     可以参考以下文章:

     TESSY创建单元测试或集成测试工程_tessy做单元测试-CSDN博客

     TESSY创建以及设计一个测试用例-CSDN博客

     接下来我们以这个作为开始状态进行介绍

2、、源码分析
static bool runner_control(uint8_t addr)
{
	 uint8_t res = 1u;
	 uint8_t wdata[2]={0x00,0x00};
	 bool result = false;
	 
   if (0u == addr){
      result = false;
   }
   else
   {
   	  res = door_open_pro(addr,&wdata,1);
   	  if(0u == res){
   	  	res = door_open_pro(addr,&wdata,2);
   	  	if((0u == res)&&(0xAA == wdata[0])){
   	  		res = door_open_pro(addr,&wdata,3);
   	  		if((0u == res)&&(0x55 == wdata[1])){
   	  			 door_open();
   	  			 result = true;
   	  		}
   	  	}
   	  }
   }
   return result;
}

       看到执行过程中,需要根据door_open_pro的返回的状态以及wdata的值来进行处理,因此需要我们通过手写桩来完成测试。

2、 创建用例
   2.1 创建普通桩

   2.2 创建用例

        创建用例后,在用例中填入数据,执行分析、运行用例,发现提示如下错误。

提示我们桩函数没有实现,在TDE界面下可以看到如下提示:

  2.3、手写桩代码

我们可以 在stub code输入框中编写如下代码,在执行一下用例,发现OK了。

 为什么需要我们手写如下这一行代码呢,因为函数中用到了这个door_open_pro的返回值。

return 1;

 但是为了执行到door_open();这个函数,那就需要写一个稍微复杂的桩代码了,如下:

static cnt = 0;

cnt++;

if(1 == cnt){
  return 0;
}else if(2 == cnt){
  pdata[0] = 0xAA;
  return 0;
}else if(3 == cnt){
  pdata[1] = 0x55;
  return 0;
}

执行结果如下:

2.4 增加调用追踪

   怎么直观的判定桩函数使测试的代码按照预期的逻辑执行呢?

   我们可以增加调用追踪,步骤如下:

     1、选择Call Trace;

     2、选择执行的函数;

     3、函数的位置操作,通过 (左移)或(右移),选中的函数就可以从Available Functions中移入Expected Calls或从Expected Calls移除到Available Functions ,通过(上移)、(下移),可以移动Expected Calls中选中的函数先后顺序;

执行结果如下:


http://www.kler.cn/a/303361.html

相关文章:

  • python制作一个简单的端口扫描器,用于检测目标主机上指定端口的开放状态
  • Mysql数据库里的SSH连接
  • 详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送
  • 使用elementUI实现表格行拖拽改变顺序,无需引入外部库
  • 深入解析 OpenHarmony 构建系统-4-OHOSLoader类
  • 字符及字符串(ASCII编码系统)
  • 麒麟桌面操作系统:查看最近安装与卸载的软件包
  • Unreal Fest 2024 虚幻引擎影视动画制作的普遍问题
  • 基于云计算的虚拟电厂负荷预测
  • Vue3前端框架学习记录
  • 《深度学习》—— 神经网络基本结构
  • Java 之 Lambda表达式
  • 刚接触无处下手?水下航行器AUV/UUV六自由度模型/控制器设计matlab/simulink参考代码,基础的/进阶的,入门到顺利毕业/完成课题/发表论文。
  • Java微服务架构最佳实践:如何设计高可用的分布式系统
  • 华为 HCIP 认证费用和报名资格
  • Java 开发中锁的选择与使用
  • MVC设计模式与delegate,tablview,Appdelegate,SceneDelegate
  • 【逐行注释】自适应观测协方差R的AUKF(自适应无迹卡尔曼滤波,MATLAB语言编写),附下载链接
  • 小程序给对象赋值(双向绑定)方法之一
  • 企业客户|基于springboot的企业客户管理系统设计与实现(附项目源码+论文+数据库)
  • 一次开发,多端部署--实例二
  • RK3568 android11 usb摄像头预览分辨率添加多分辨率---解除1080p限制
  • 实现绑定UDP端口的Server程序
  • 大模型微调 - 基于预训练大语言模型的对话生成任务 训练代码
  • 计算机二级自学笔记(选择题1部分)
  • git的快速合并fast-forward merge详解