哈库拉玛塔塔——tjitty

记录下网络上的精品测试技术文章 and 生活

统计

留言簿(7)

积分与排名

阅读排行榜

评论排行榜

Tcl单元测试环境搭建指南

 
第一步 :
获取 tcl8.3 的安装包,安装到 c:\ 目录下,注意:在安装的过程中需要选择头文件和库文件。
 
第二步 :
利用 Visual C++ 建立一个基于对话框的工程,工程的名字为 utsample
 
第一步:
获取tcl8.3的安装包,安装到c:\目录下,注意:在安装的过程中需要选择头文件和库文件。
 
第二步:
利用Visual C++建立一个基于对话框的工程,工程的名字为utsample

 

 
第三步:
参照下图,创建utsample.h文件.

 
 
第四步:
1)把下面的代码拷贝到utsample.h中
#include "tcl.h"
 
#define RET_ERR false
#define RET_OK  true
#define MAX_WORD_LEN 32
 
int GetWordFromStr(char *pStr,char *pDestStr,int iPos);
int Tcl_EXGetWord(ClientData clientData,               
          Tcl_Interp * interp,
          int argc,   char* argv[]);
 
int  Tcl_AppInit(Tcl_Interp *interp);
 
2)把下面代码拷贝到utsample.cpp中
#include "stdafx.h"
#include "utsample.h"
#include "memory.h"
 
 
int main(int argc, char* argv[])
{
    Tcl_Main(argc, argv,Tcl_AppInit);
    return 0;
}
 
/*GetWordFromStr函数的扩展指令函数*/
int Tcl_EXGetWord(ClientData clientData,               
          Tcl_Interp * interp,
          int argc,   char* argv[])
{
    int iPos;
    bool rCode;
   
    char pDestStr[32];
    memset(pDestStr,0,32);
 
    if(3 != argc)
    {
        printf("the paras number is wrong\n");
        return TCL_OK;
    }
 
    if (TCL_OK != Tcl_GetInt(interp,argv[2],&iPos))
    {
        printf("the para 2 is wrong\n");
        return TCL_OK;
    }
 
    rCode = GetWordFromStr(argv[1],pDestStr,iPos);
 
    if(rCode == RET_OK)
    {
        printf("The Destine string is %s\n",pDestStr);
    }
    else
    {
        printf("It's fail to get the string!\n");
    }
 
    return TCL_OK;
}
 
/*tcl解释器和扩展指令的初始化函数*/
int Tcl_AppInit(Tcl_Interp *interp)

    /*创建interp解释器可以识别的扩展指令,指令的名字是GetWord,执行该指令,直接调用Tcl_EXGetWord扩展指令函数,通过传递参数,可以执行单元测试用例*/
    Tcl_CreateCommand(interp, "GetWord",
           Tcl_EXGetWord, (ClientData)NULL,
           (Tcl_CmdDeleteProc *)NULL);
    return TCL_OK;
}
 
3)把被测试函数GetWordFromStr的函数体拷贝到utsample.cpp中
 
第五步:
添加tcl头文件和库文件,并设置相应的头文件和库文件路径
1)如下图所示,采用如下方法添加tcl83包中的tcl.h和tcl83.lib

 
2)在[tool…]->[Option…]->[Directory….]菜单中,设置tcl83包的头文件路径:

 
3)在[tool…]->[Option…]->[Directory….]菜单中,设置tcl83包的库文件路径:

 
第六步:
编译通过后,运行,出现控制台程序,输入GetWord “wo ai zhong guo” 3
则出现如下的结果界面

 
备注:
在嵌入式系统,如果不希望使用上述控制台程序的方式,可以自己构造tcl解释器,然后初始化解释器,然后利用解释器创建扩展指令,并且用自己创建的解释器运行tcl脚本。相关的代码见下面:
 
/*定义tcl解释器*/
Tcl_Interp* MyInterp;
/*调用tcl的内部函数,创建解释器*/
MyInterp = Tcl_CreateInterp();
/*调用tcl的内部函数,初始化tcl解释器*/
Tcl_Init(MyInterp);
 
//通过那嵌入集成测试框架的Tcl解释器MyInterp,运行tcl脚本E:/test.tcl
rCode = Tcl_EvalFile(MyInterp,"E:/test.tcl" );
if  (TCL_OK != rCode )
{
    AfxMessageBox("There are errors in your Tcl File");
}
 
创建扩展指令的方式参见本文前面的描述

 

 
第三步:
参照下图,创建 utsample.h 文件 .

 
 
第四步:
1 )把下面的代码拷贝到 utsample.h 中
#include "tcl.h"
 
#define RET_ERR false
#define RET_OK  true
#define MAX_WORD_LEN 32
 
int GetWordFromStr(char *pStr,char *pDestStr,int iPos);
int Tcl_EXGetWord(ClientData clientData,               
          Tcl_Interp * interp,
          int argc,   char* argv[]);
 
int  Tcl_AppInit(Tcl_Interp *interp);
 
2 )把下面代码拷贝到 utsample.cpp 中
#include "stdafx.h"
#include "utsample.h"
#include "memory.h"
 
 
int main(int argc, char* argv[])
{
    Tcl_Main(argc, argv,Tcl_AppInit);
    return 0;
}
 
/*GetWordFromStr 函数的扩展指令函数 */
int Tcl_EXGetWord(ClientData clientData,               
          Tcl_Interp * interp,
          int argc,   char* argv[])
{
    int iPos;
    bool rCode;
   
    char pDestStr[32];
    memset(pDestStr,0,32);
 
    if(3 != argc)
    {
        printf("the paras number is wrong\n");
        return TCL_OK;
    }
 
    if (TCL_OK != Tcl_GetInt(interp,argv[2],&iPos))
    {
        printf("the para 2 is wrong\n");
        return TCL_OK;
    }
 
    rCode = GetWordFromStr(argv[1],pDestStr,iPos);
 
    if(rCode == RET_OK)
    {
        printf("The Destine string is %s\n",pDestStr);
    }
    else
    {
        printf("It's fail to get the string!\n");
    }
 
    return TCL_OK;
}
 
/*tcl 解释器和扩展指令的初始化函数 */
int Tcl_AppInit(Tcl_Interp *interp)

    /* 创建 interp 解释器可以识别的扩展指令,指令的名字是 GetWord ,执行该指令,直接调用 Tcl_EXGetWord 扩展指令函数,通过传递参数,可以执行单元测试用例 */
    Tcl_CreateCommand(interp, "GetWord",
           Tcl_EXGetWord,(ClientData)NULL,
           (Tcl_CmdDeleteProc *)NULL);
    return TCL_OK;
}
 
3 )把被测试函数 GetWordFromStr 的函数体拷贝到 utsample.cpp 中
 
第五步:
添加 tcl 头文件和库文件,并设置相应的头文件和库文件路径
1 )如下图所示,采用如下方法添加 tcl83 包中的 tcl.h 和 tcl83.lib

 
2 )在 [tool…]->[Option…]->[Directory….] 菜单中,设置 tcl83 包的头文件路径:

 
3 )在 [tool…]->[Option…]->[Directory….] 菜单中,设置 tcl83 包的库文件路径:

 
第六步:
编译通过后,运行,出现控制台程序,输入 GetWord “wo ai zhong guo” 3
则出现如下的结果界面

 
备注:
在嵌入式系统,如果不希望使用上述控制台程序的方式,可以自己构造 tcl 解释器,然后初始化解释器,然后利用解释器创建扩展指令,并且用自己创建的解释器运行 tcl 脚本。相关的代码见下面:
 
/* 定义 tcl 解释器 */
Tcl_Interp* MyInterp;
/* 调用 tcl 的内部函数,创建解释器 */
MyInterp = Tcl_CreateInterp();
/* 调用 tcl 的内部函数,初始化 tcl 解释器 */
Tcl_Init(MyInterp);
 
// 通过那嵌入集成测试框架的 Tcl 解释器 MyInterp ,运行 tcl 脚本 E:/test.tcl
rCode = Tcl_EvalFile(MyInterp,"E:/test.tcl" );
if  (TCL_OK != rCode )
{
    AfxMessageBox("There are errors in your Tcl File");
}
 
创建扩展指令的方式参见本文前面的描述

posted on 2007-01-31 16:24 tjitty 阅读(1846) 评论(6)  编辑 收藏 引用 所属分类: 测试相关

评论

# re: Tcl单元测试环境搭建指南 2007-01-31 16:32 tjitty

图片粘贴不上去,只有先记下文字了
  回复  更多评论   

# re: Tcl单元测试环境搭建指南[未登录] 2009-05-19 10:28 danny

你自己这样试过没?就知道粘贴别人的文章!  回复  更多评论   

# re: Tcl单元测试环境搭建指南 2010-06-18 09:44 tjitty

@danny
这是我自己在项目中的第一个测试框架。  回复  更多评论   

只有注册用户登录后才能发表评论。