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

这篇具有很好参考价值的文章主要介绍了一文看懂单元测试中的打桩。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、概念

二、目的

三、方法

编译时打桩

链接时打桩

运行时打桩


一、概念

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

二、目的

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

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

三、方法

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

编译时打桩

用宏定义#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://www.toymoban.com/news/detail-443040.html

到了这里,关于一文看懂单元测试中的打桩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文看懂自动驾驶中的坐标变换

    在自动驾驶任务中,我们通过各种传感器对周围环境进行感知,获取图片。点云等各种数据,由于传感器的位置、数据的形式、不同数据的含义等差异,在进行环境感知任务前,需要进行坐标、数据形式的统一,其中坐标变换是极其重要的一环。 根据参照物的不同,坐标系主

    2024年02月05日
    浏览(37)
  • 一文看懂电容的种类及其在电路中的作用

    电容是一种电子元件,它的作用是存储电荷能量。电容器由两个导体板之间用电介质隔开形成,导体板上分别带有相反的电荷,在电场的作用下,一边负一边正,形成电容。电容的大小由电容器的尺寸、电介质介电常数和导体板间距等因素决定,单位为法拉(F)。电容器在电子

    2024年02月11日
    浏览(42)
  • 【单元测试】一文读懂java单元测试

    单元测试 是软件开发中常用的一种测试方法,用于验证代码的单个功能单元是否按照预期工作。 测试方法: 白盒测试(White Box Testing):在白盒测试中,测试人员了解代码的内部结构和实现细节,编写测试用例来覆盖不同的代码路径和逻辑条件。 黑盒测试(Black Box Testing)

    2024年04月17日
    浏览(45)
  • 一文读懂java单元测试

    白盒测试(White Box Testing):在白盒测试中,测试人员了解代码的内部结构和实现细节,编写测试用例来覆盖不同的代码路径和逻辑条件。 黑盒测试(Black Box Testing):黑盒测试不考虑代码的内部实现,而是基于需求规格说明或功能规范编写测试用例,测试程序的输入和输出

    2024年02月04日
    浏览(42)
  • 一文搞定idea中的根目录

    在IntelliJ IDEA中,一个项目只有一个 项目 根目录(Project Root),这个根目录在本地硬盘中存放着整个项目的内容。但是,在IDEA的项目结构中,可以有多个 内容 根目录(Content Root),这些内容根目录是相对于项目模块(Module)而言的,内容根目录进一步细分了项目中的不同部

    2024年03月19日
    浏览(37)
  • 单元测试基本概念

    单元测试一般是开发来做的,但是因为业务需要也曾涉及过单元测试。目前就单元测试的基础概念做下总结。 单元测试是软件开发中的一种测试方法,用于验证程序中的最小可测单元——即代码中的单个函数、方法或模块。单元测试的目的是检查单元(代码的最小功能单元)

    2024年01月17日
    浏览(31)
  • 【一文清晰】单元测试到底是什么?应该怎么做?

    我是java程序员出身,后来因为工作原因转到到了测试开发岗位。测试开发工作很多年后,现在是一名自由职业者 1、什么是单元测试 2、该怎么做单元测试 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围,并没有一个明确

    2024年02月07日
    浏览(51)
  • 一文掌握谷歌 C++ 单元测试框架 GoogleTest

    GoogleTest GoogleTest(简称 GTest) 是 Google 开源的一个跨平台的(Liunx、Mac OS X、Windows等)的 C++ 单元测试框架,可以帮助程序员测试 C++ 程序的结果预期。不仅如此,它还提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。 GoogleTest 官网:https://google.github.io/go

    2024年02月03日
    浏览(43)
  • 单元测试之@Mock与@InjectMocks(一文搞懂)

    @Mock与@InjectMocks一般搭配组合使用,是单元测试必不可少的注解 @Mock:需要模拟的类,我们需要模拟哪些类,就用它修饰哪些类的变量,常用于第三方服务service @InjectMocks:要测试的类,使用@Mock修饰的对象,就是我们测试哪个类,就用它修饰对应的变量,会整合使用@Mock修饰

    2024年02月06日
    浏览(40)
  • 一文搞懂Go gRPC服务Handler单元测试

    在云原生时代和微服务架构背景下,HTTP和RPC协议成为服务间通信和与客户端交互的两种主要方式。对于Go语言而言,标准库提供了net/http/httptest包,为开发人员提供了便捷的方式来构建服务端HTTP Handler单元测试的测试脚手架代码,而无需真正建立HTTP服务器,让开发人员可以聚

    2024年02月04日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包