news 2026/4/16 13:54:11

软件测试的白盒测试(二)之单元测试环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
软件测试的白盒测试(二)之单元测试环境

本章节主要讲解“软件测试的白盒测试(二)之单元测试环境”的内容,单元测试环境是指单元本身不是一个独立的程序,一个完整的可运行的软件系统并没有构成,所以必须为每个单元测试开发驱动单元和桩单元。

一个完整的单元测试环境如图10-2所示。

图10-2 单元测试环境

  • 驱动单元(Driver):所测函数的主程序,它接收测试数据,并把数据传送给测试单元,最后再输出实测结果。当被测试单元能完成相关功能时,也可以不要驱动单元(如顶层函数就可以不使用驱动单元)。

驱动单元具有如下特点:

  • (1)接收测试数据,包含测试用例输入和预期输出。

  • (2)把测试用例输入传送给要测试的单元。

  • (3)将被测单元的实际输出和预期输出进行比较,得到测试结果。

  • (4)将测试结果输出到指定位置。

  • 桩单元(Stub):用来代替所测单元调用的子单元。

桩单元具有如下特点:

  • (1)桩单元的功能是从测试角度模拟被调用的单元。

  • (2)桩单元需要针对不同的输入,返回不同的期望值,模拟所替代单元的不同功能。

  • (3)桩单元返回的期望值根据输入和被模拟单元的详细设计来确定。

  • 【实例】被测试的函数为FuncTest,调用的子函数为加法函数add 和减法函数sub。

函数代码如下:

由于被测试函数FuncTest 调用了加法与减法两个函数,所以应该先写加法和减法的桩函数。

但如果加法和减法这两个函数都已经经过了测试,并且是正确的,那么可以不用写桩函数,直接调用这两个函数即可。

写好后的桩函数代码如下:

//模拟加法函数的桩 int stub_add(int a, int b) { if((a==1) && (b==1)) { return 2; } if((a==2) && (b==1)) { return 3; } if((a==3) && (b==0)) { return 3; } else return 9999;//只是为了处理异常,而且是自定义的 } //减法函数的桩 int stub_sub(int a, int b) { if((a==1) && (b==2)) { return -1; } if((a==2) && (b==3)) { return -1; } if((a==0) && (b==3)) { return -3; } else return 9999;//只是为了处理异常,而且是自定义的 }

接下来写驱动模块,一般驱动程序都为main 函数,驱动模块的代码如下:​​​​​​​

int main() { int z=0;//接受被测试函数结果 z=FuncTest(1,1); if(2 == z) { printf("测试用例001 通过! "); } z=FuncTest(2,1); if(3 == z) { printf("测试用例002 通过!"); } z=FuncTest(1,2); if(-1 == z) { printf("测试用例003 通过!"); } return z; }

从上面的实例中可以看出,桩函数主要用于代替被测试函数(FuncTest 函数)所调用的函数(add函数和sub 函数),之所以设计桩函数就是为了隔离错误。假设如果不设计桩函数,直接调用add函数和sub 函数,当测试结果失败时就无法确定是被测试函数(FuncTest 函数)还是被调用函数(add函数和sub 函数)出错。

那么什么时候需要写桩函数呢?

一般以下两种情况需要写桩函数:

  • (1)被调用的函数未经过测试,不能保证其正确性。

  • (2)被调用的函数虽然已经测试过,但是有一些情况无法模拟,此时也需要写桩函数。

如函数test:​​​​​​​

int test(int x, int y) { … if(a > 10) { return x + y; } else return 9999;//只是为了处理异常,而且是自定义的 }

假设被测试函数需要调用该函数,test 函数也经过测试且是正确的,但是在实际使用过程中很难模拟出a<10 时的值,那么测试过程中就可以通过桩函数人为地模拟这种情况。

测试过程中并不是每次都需要写桩函数,通常以下情况不需要写桩函数:

(1)最底层函数,即被测试函数不调用任何的其他函数,此时不需要写桩函数。

(2)被调用的函数已经经过测试,并且是正确的。

测试过程中也并不是每次都需要写驱动函数,对于顶层函数或main函数,测试时就不需要写驱动函数。

本章节关于“软件的白盒测试(二)之单元测试环境”的内容就学习到这里,大家觉得文章有用的话一定要关注我们,每天来这里和小编一起学习涨薪技能哦。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:08:28

【稀缺资源预警】:智谱Open-AutoGLM宣传视频即将下架?速存!

第一章&#xff1a;智谱Open-AutoGLM宣传视频下载 智谱AI推出的Open-AutoGLM是一款面向自动化文本生成任务的开源工具&#xff0c;结合大模型能力与低代码操作界面&#xff0c;广泛应用于智能客服、报告生成和数据摘要等场景。其官方宣传视频详细展示了系统功能、交互流程与典型…

作者头像 李华
网站建设 2026/4/16 11:15:51

django西西家居全屋定制系统的设计与实现

系统简介 西西家居全屋定制系统是一种创新性的家居装饰解决方案&#xff0c;它以个性化设计、高效服务、优质材料和智能化生产为核心特点&#xff0c;致力于为用户提供高品质、个性化的居住环境。随着人们对生活品质和个性化需求的不断提高&#xff0c;西西家居全屋定制系统有…

作者头像 李华
网站建设 2026/4/16 9:08:41

Springboot基于小程序的助眠小程序

系统简介 当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统助眠采取了人工的管理方法&#xff0c…

作者头像 李华
网站建设 2026/4/16 9:13:01

【Ollama与Open-AutoGLM深度整合】:释放私有化AI推理潜力的7种方式

第一章&#xff1a;Ollama与Open-AutoGLM整合概述将本地大模型运行框架 Ollama 与自动化代码生成工具 Open-AutoGLM 进行整合&#xff0c;标志着开发者在本地化 AI 编程辅助领域迈出了关键一步。该整合方案充分利用 Ollama 提供的高效模型推理能力&#xff0c;结合 Open-AutoGL…

作者头像 李华
网站建设 2026/4/15 11:51:29

保姆级网络安全实战教程:从零基础到精通的完整路线图

一、何为网络安全 网络安全&#xff0c;简而言之&#xff0c;就是保护网络系统中的数据免受未经授权的访问、泄露、篡改或破坏的一系列措施和策略。它不仅仅是技术层面的防护&#xff0c;还涉及管理、法律和社会等多个层面&#xff0c;以维护网络环境的安全和稳定 。其具体特性…

作者头像 李华