关于编写单元测试中的驱动模块

发表于:2008-1-30 14:54

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

 作者:未知    来源:网络转载

6.8接口
序号
 调用者
 被调用者
 
1.      
 类名称:FrameMain

类说明:程序主界面

调用说明:按钮、菜单显示参数配置界面
名称:本类的实例化对象 ParameterPage

调用说明:show()、toFront()方法

2.      
 各个服务模块
 调用说明:直接调用getParam()方法
 
——————————————————————————————————————————————————————————
        那么对于这一个单元模块来讲,在开发时是再涉及到单元测试时,往往show(),toFront()方法还没有开发出来,所以测试工程师需要独立开发驱动模块或桩模块。,驱动模块和桩模块的概念如下,网上有很多概念,不好理解,我认为用这种说法更方便理解。

 

        驱动模块在大多数场合称为"主程序",它接收测试数据并将这些数据传递到被测试模块,相反桩模块就是那些被测试模块所调用的“程序”,它们之间的区别是调用与被调用的关系。


        往往被测试单元的上层程序还没有开发出来我们就需要实施单元测试,上层程序有时要包含多个调用界面,函数,方法等,而我们测试的单元模块的期望结果有可能只有返回一个值或是传递一个参数,这时候就需要编写驱动模块或者是桩模块(如果是需要调用其它函数返回的值)。


        如何编写桩模块?举一个简单的例子


/*被测程序*/
int Fun(int in)
{
    if (in >= 0)
    {
        return 1;
    }
    else
    {
        return -1;
    }
}

        那么通过TCL进行扩展指令编写时,针对该被测函数,驱动如下:

/*用户自己扩展的用户指令,用来驱动被测函数*/
int Ex_TestFun(ClientData clientData,Tcl_Interp * interp,int argc,  char* argv[])
{
     int i;
     int ret,iExceptedRet;

    //打开测试结果记录文件
    FILE * out;
    out = fopen("D:\\result.txt","a");
                    
    //第一步:检查用户输入参数个数是否正确
    if (3 != argc)
    {
        fputs("Parameters error",out);
        fflush(out);
                return TCL_ERROR;
    }
   
   //第二步:取出用户输入参数
    if (TCL_OK != Tcl_GetInt(interp,argv[1],&i))
   {
              return TCL_ERROR;           
   }

   if (TCL_OK != Tcl_GetInt(interp,argv[2],&iExceptedRet))
   {
        return TCL_ERROR;
   }


   //第三步:将参数传递给被测函数
   ret = Fun(i);

   //第四步:将被测函数执行结果和输入的期望结果进行比较,根据比较结果作为用例执行结果输出到测试报告中
  if (ret != iExceptedRet)
   {
        fputs("test fail",out);
        fflush(out);
   }
   else
   {
        fputs("test success",out);
        fflush(out);
   }

   return TCL_OK;
}
——————————————————————————
        驱动模块编写完毕后,就可以直接实施单元测试而不必等待上层的程序开发出来才能进行测试,提高工作效率。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号