博客
关于我
什么是单元测试中的打桩
阅读量:737 次
发布时间:2019-03-21

本文共 996 字,大约阅读时间需要 3 分钟。

桩代码(Stubbing)是软件开发中用于替代关联代码或未实现代码的技术。具体而言,当函数B使用B1来代替,那么B就是原函数,而B1称为桩函数。编写或生成桩代码的过程称为打桩(Stubby)。

打桩的目的

打桩的主要目的包括隔离、补齐和控制。

  • 隔离:通过将测试任务与产品项目分离,确保测试任务能独立编译、链接并运行。例如,若函数A调用了函数B,函数B再调用了函数C和D,若用桩代替函数B,那么函数A就与函数C、D无关,从而实现隔离。
  • 补齐:用桩替代未实现的代码。在并行开发中尤为常见,例如函数A调用了函数B,而函数B尚未开发完成时,可以用桩替代B,使A能够运行并测试。
  • 控制:在测试中人为设定代码行为,以满足测试需求。例如,当函数B返回随机数、网络状态或环境温度时,可以用桩函数代替B,使其返回特定测试所需的数据。

以下是一个桩函数的示例:

int GetTemperature(int* pTemperature) {    if (caseNameIs("failed")) {        return 0;    }    if (caseNameIs("ok-23")) {        *pTemperature = 23;        return 1;    }    if (caseNameIs("ok-25")) {        *pTemperature = 25;        return 1;    }    if (caseNameIs("ok-28")) {        *pTemperature = 28;        return 1;    }    return 0;}

其中,caseNameIs()是由测试工具提供的API,用于判断用例名称,进而决定输出数据。

编写桩函数

一般来说,桩函数需要与原函数保持完全一致,只是实现不同,以便测试代码能够正确链接到桩函数。用于实现隔离和补齐的桩函数通常很简单,即将原函数声明拷贝过来,并添加一个空实现。

然而,实现控制功能的桩函数可能会更复杂,要根据测试需求输出合适的数据。例如,上述的GetTemperature函数不仅实现了隔离和补齐,还通过测试工具控制输出特定温度值。

总之,打桩是一种有效的测试工具,能够帮助开发者在测试过程中隔离、补齐或控制相关代码,从而提高测试效率和代码质量。

转载地址:http://cefrz.baihongyu.com/

你可能感兴趣的文章
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>
NMAP网络扫描工具的安装与使用
查看>>
NMF(非负矩阵分解)
查看>>
nmon_x86_64_centos7工具如何使用
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.7 Parameters vs Hyperparameters
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
nnU-Net 终极指南
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
no available service ‘default‘ found, please make sure registry config corre seata
查看>>
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
查看>>
no connection could be made because the target machine actively refused it.问题解决
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
查看>>
No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
查看>>
No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
查看>>
No module named 'crispy_forms'等使用pycharm开发
查看>>