0


一文看懂单元测试中的打桩

一、概念

函数打桩,就是将一个函数用另一个函数实现(桩代码)进行替换,以达到在原有函数入口的位置执行新的实现。

二、目的

函数打桩的目的一般是隔离、占位和控制。

  • 隔离是指将测试任务从产品项目中分离出来,使之能够独立编译、链接,并独立运行。隔离的基本方法就是打桩,将测试任务之外的,并且与测试任务相关的代码,用桩来代替,从而实现分离测试任务。
  • 占位就是用桩对一些未实现的函数进行占位,多见于协同开发中,对于其他人完成的函数可以先使用桩函数进行占位。
  • 控制是指在测试时,人为设定相关代码的行为,使之符合测试需求。

三、方法

编译时、链接时、运行时。

编译时打桩

用宏定义#define,在预处理时进行字符串替换,将原函数定义成桩函数的形式。同时可以使用条件编译来控制编译选项。

链接时打桩

链接时打桩就是调用的函数库替换。将桩函数定义到新的库文件中,并在原代码基础上增加条件编译选项,屏蔽原有的库,采用桩函数库。

运行时打桩

运行时打桩就是函数地址替换。这种方法要复杂一点,但是不需要对原有的代码进行修改,而是额外增加了打桩和还原的操作,在进行单元测试时也常用。

简单来说,就是读取到原函数指令的地址,并读取桩函数的地址,并使用jmp命令从原函数跳转到桩函数去,以实现打桩。需要实现类似

int install_stub(void *orig_f, void *stub_f)
int uninstall_stub(void *stub_f)

参考优秀博客:

stub | Simest's Blog (sim41.com)

认识单元测试中的打桩_wangwencong的博客-CSDN博客_单元测试 打桩

标签: 单元测试

本文转载自: https://blog.csdn.net/weixin_36389889/article/details/129055360
版权归原作者 alibli 所有, 如有侵权,请联系我们删除。

“一文看懂单元测试中的打桩”的评论:

还没有评论