单元测试中的独立运行
作者:网络转载 发布时间:[ 2012/11/26 10:32:03 ] 推荐标签:
单元测试是针对代码单元的独立测试。要测试代码单元,首先要其使能够独立运行。项目中的代码具有依赖关系,例如,一个源文件可能直接或间接包含大量头文件,并调用众多其他源文件的代码,抽取其中的一个或一组源文件,一般是无法独立编译运行的。这要用技术手段进行隔离,即将测试任务与其他代码隔离,必要时还要与依赖系统隔离。此外,并行开发过程中,边开发边测试,还需补齐尚未实现但需调用的代码。
1、与其他代码隔离
与其他代码隔离的一般方式是打桩,桩是用来代替实际代码的简单代码,打桩是编写或生成桩代码。例如,函数A调用了函数B,函数B又调用了函数C和函数D,如果函数B用桩来代替,那么,函数A可以完全切断与函数C和函数D的关系。
如果项目有1000个源文件,一位工程师负责测试其中50个,这50个源文件是测试任务。是不是需要将其他950个源文件的代码都打桩呢?不是的。
与测试任务关系密切的底层或相关源文件应该直接加入编译,不要打桩,测试时可以调用实际代码,这些源文件称为外围文件。特别是,有些测试数据需要调用现有代码来生成,这些代码所在的文件应作为外围文件。
其他文件也不需要全部打桩,只有与测试任务和外围文件有关联的代码才需要打桩。自动化测试工具可以根据代码之间的关系,自动识别需打桩的代码。手工测试方式,则可以利用编译器来识别需打桩的代码。将测试任务和外围文件加入测试工程后编译,对于需打桩的函数或全局变量,编译器会报告“符号未定义”链接错误(如VC系列的LNK2005错误)。
2、与依赖系统隔离
与依赖系统隔离常见于跨平台测试,例如在PC上测试嵌入式项目。单元测试是针对代码单元的独立测试,主要检测代码功能逻辑,平台设备可以抽象为功能逻辑的组成部分,例如嵌入式设备的端口、寄存器可以视为全局变量,嵌入式操作系统API可以视为一般的底层函数调用,因此,嵌入式项目可以跨平台测试。跨平台测试一般要解决两个问题:编译差异和平台差异。
跨平台测试可能要使用与开发环境不同的编译环境来编译测试代码,这可能产生编译差异,例如,有些嵌入式编译器自定义了非标准的特殊关键字,或支持非标准的代码片断,这些特殊关键字和代码片断,一般与功能逻辑无关,测试时可以屏蔽。测试工具可以自动完成这些工作。手工测试方式,则可以利用宏来实现屏蔽。
平台差异主要表现在基本数据类型的长度差异,例如,int类型在有些嵌入式开发环境下是16位的,而在一般编译器下是32的。测试工具可以转定义关键字,解决这种差异。手工测试方式,则可以利用宏来实现转定义。
总的来说,独立运行是比较容易解决的,例如打桩,是一种简单的技术,并且可以用工具自动生成桩代码。真正困难的是覆盖输入问题。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11