单元测试中如何对可变参函数打桩

发表于:2009-9-01 14:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wzhwho    来源:CSDNBlog

  我觉得,整个项目最辛苦的阶段是UT,为什么?因为UT的工作又细致又繁琐。工作量往往都比预期的要大。我用过三个UT工具。最方便的是北研的镜像测试工具(Mirror Test Tools,MTT)是应用镜象测试技术理论,将脚本(python)化的变量控制与桩驱动应用于单元测试与集成测试,以达到高效率高质量的支撑白盒测试的目的,为公司使用C语言的产品提供通用的调测服务。接着是CUNIT,是应用在Linux平台下的一个轻型的C语言单元测试框架,比较适合深研,可以在真实环境下完成UT工作。最后是C++Test,是一款在windows环境下运行的单元测试工具,而我们在linux系统下开发,就需要它模拟 Linux环境。它号称可以生成80%的UT代码,其实都是需要我们自己编写,最大的缺点就是性能超级慢。最后,说说我做UT的体会,做UT就是需要学会如何打桩,其它都是细致活儿。

  1. 如何对一个函数进行多次打桩

  有时候我们会遇到这样的情况,被测函数是func_aaa,而这个函数又多次调用了fopen,并且func_aaa每次调用fopen时要求返回不同的值。我们可以这样编写桩函数,如下:

int g_stub_list_flag;//全局置位标志变量
int g_stub_clear_flag;//清除桩函数静态变量的全局变量
FILE * stub_fopen(char *filename ,const char *mode)
{
     FILE *fp;
     static int call_count= 0;

     if(0 == g_stub_clear_flag)
    {
        call_count = 0;
        g_stub_clear_flag g = 1;
    }

    call_count++;

    if(g_stub_list_flag & (1<< call_count-1))
    {
        return NULL;
    }
    else

    {
        fp = fopen(filename, mode);
        return fp;
    }

}

  如果,我们需要对fopen函数进行打桩,并且第一次要求成功,第二、三次要求失败,驱动代码如下:

void UT_func_aaa_Case_01()
{
    g_stub_clear_flag = 0;
    g_stub_list_flag = 1|1<<2;
    fp = fopen(filename,mode);
}

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号