51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 574|回复: 0
打印 上一主题 下一主题

[讨论] 单元测试中的独立运行

[复制链接]
  • TA的每日心情
    开心
    2022-9-21 15:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2023-4-19 10:37:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      单元测试中的独立运行
      单元测试是针对代码单元的独立测试。要测试代码单元,首先要其使能够独立运行。项目中的代码具有依赖关系,例如,一个源文件可能直接或间接包含大量头文件,并调用众多其他源文件的代码,抽取其中的一个或一组源文件,一般是无法独立编译运行的。这就要用技术手段进行隔离,即将测试任务与其他代码隔离,必要时还要与依赖系统隔离。此外,并行开发过程中,边开发边测试,还需补齐尚未实现但需调用的代码。
      1、与其他代码隔离
      与其他代码隔离的一般方式是打桩,桩是用来代替实际代码的简单代码,打桩就是编写或生成桩代码。例如,函数A调用了函数B,函数B又调用了函数C和函数D,如果函数B用桩来代替,那么,函数A就可以完全切断与函数C和函数D的关系。
      如果项目有1000个源文件,一位工程师负责测试其中50个,这50个源文件就是测试任务。是不是需要将其他950个源文件的代码都打桩呢?不是的。


      与测试任务关系密切的底层或相关源文件应该直接加入编译,不要打桩,测试时可以调用实际代码,这些源文件称为外围文件。特别是,有些测试数据需要调用现有代码来生成,这些代码所在的文件应作为外围文件。
      其他文件也不需要全部打桩,只有与测试任务和外围文件有关联的代码才需要打桩。自动化测试工具可以根据代码之间的关系,自动识别需打桩的代码。手工测试方式,则可以利用编译器来识别需打桩的代码。将测试任务和外围文件加入测试工程后编译,对于需打桩的函数或全局变量,编译器会报告“符号未定义”链接错误(如VC系列的LNK2005错误)。
      2、与依赖系统隔离
      与依赖系统隔离常见于跨平台测试,例如在PC上测试嵌入式项目。单元测试是针对代码单元的独立测试,主要检测代码功能逻辑,平台设备可以抽象为功能逻辑的组成部分,例如嵌入式设备的端口、寄存器可以视为全局变量,嵌入式操作系统API可以视为一般的底层函数调用,因此,嵌入式项目可以跨平台测试。跨平台测试一般要解决两个问题:编译差异和平台差异。
      跨平台测试可能要使用与开发环境不同的编译环境来编译测试代码,这就可能产生编译差异,例如,有些嵌入式编译器自定义了非标准的特殊关键字,或支持非标准的代码片断,这些特殊关键字和代码片断,一般与功能逻辑无关,测试时可以屏蔽。测试工具可以自动完成这些工作。手工测试方式,则可以利用宏来实现屏蔽。
      平台差异主要表现在基本数据类型的长度差异,例如,int类型在有些嵌入式开发环境下是16位的,而在一般编译器下是32的。测试工具可以转定义关键字,解决这种差异。手工测试方式,则可以利用宏来实现转定义。
      总的来说,独立运行是比较容易解决的,例如打桩,就是一种简单的技术,并且可以用工具自动生成桩代码。真正困难的是覆盖输入问题。


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-8 10:37 , Processed in 0.070277 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表