博客
关于我
什么是单元测试中的打桩
阅读量: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/

你可能感兴趣的文章
OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
查看>>
OpenCV与AI深度学习 | 基于YoloV11自定义数据集实现车辆事故检测(有源码,建议收藏!)
查看>>
OpenCV与AI深度学习 | 基于YOLOv8 + BotSORT实现球员和足球检测与跟踪 (步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLOv8实现高级目标检测和区域计数
查看>>
OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
查看>>
OpenCV与AI深度学习 | 基于YoloV8的药丸/片剂类型识别
查看>>
OpenCV与AI深度学习 | 基于YOLO和EasyOCR从视频中识别车牌
查看>>
OpenCV与AI深度学习 | 基于图像处理的火焰检测算法(颜色+边缘)
查看>>
OpenCV与AI深度学习 | 基于拉普拉斯金字塔实现图像融合(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 基于改进YOLOv8的景区行人检测算法
查看>>
OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
查看>>
OpenCV与AI深度学习 | 基于深度学习的轮胎缺陷检测系统
查看>>
OpenCV与AI深度学习 | 如何使用YOLO-World做目标检测
查看>>
OpenCV与AI深度学习 | 如何使用YOLOv9分割图像中的对象
查看>>
OpenCV与AI深度学习 | 如何使用YOLOv9检测图片和视频中的目标
查看>>
OpenCV与AI深度学习 | 如何在 Docker 容器中使用 GPU
查看>>
OpenCV与AI深度学习 | 实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
查看>>