C/C++单元测试工具Visual Unit 4在线帮助


新建回调赋值:基础

打开设定回调赋值对话框
    只在树表模式下可以新建回调赋值。
    在树表中选中含有有效变量的一行,右键菜单选择“新建回调赋值”,即可打开设定回调赋值对话框,如下图。

   

界面介绍
    目标类型:要设定回调赋值的数据类型,初始的数据类型为当前行的数据类型,可以修改。
    模板参数:如果类型为模板,会自动填写模板参数。
    过渡类型,即用于数据表的类型,上图中,表格中用LPCTSTR(字符串)类型作为过渡类型,作为数据表格中的输入输出数据类型。
    包含头文件:涉及到类型定义所在的头文件,可以多选。如果不明确需要包含哪些头文件,可以先不设定,产生编译错误时,再进行修改(在树表界面下右键菜单选择“编辑回调类型”可以修改已定义的回调类型)。

选项
    对别名有效:如果选中,则回调赋值对于使用typedef定义的别名类型同样有效。
    允许直接赋值:如果选中,则数据表中同时显示使用回调赋值的行和不使用回调赋值的行,建立用例时,可以视需要使用回调赋值,或直接设定输入输出。
    仅在表格设置了值时调用:只在表格中设置了值时,才会调用回调函数。
    散列比较:此选项仅对输出有效,如果数据类型是CMap之类的散列集合,应选中此项,可以在数据表格中用类似于数组或链表的方式,直接判断整个散列集合中的数据。

代码
    回调函数的代码,设定前述各项时,代码会自动更新,应该在前述各项均设置好后,再编辑函数代码。

从已存在的回调赋值中拷贝(推荐)
    点击“拷贝自”,可以导入已存在的回调赋值数据及代码,导入后再进行修改。
    建议从现有回调赋值设置中导入一个近似的,特别是,如果不了解选项的设置,或编写回调代码感觉比较困难的时候。VU自带的有:
    Mail:C语言单向链表
    ListItem: C语言双向链表
    FILE: C标准库FILE结构
    CString: VC字符串
    CStringList: VC字符串链表
    CList: VC链表(模板)
    CMap:通用影射表(模板)
    CMapStringToPtr: VC字符串to指针映射表
    CTokenList:一个示例,由代码解释成的token链表,建立比较复杂的回调赋值,需要调用其他代码来生成数据的情形,可以参考这个示例。

回调函数
    系统自动生成代码框架,用户需要修改和可以修改的代码,位于
    _INPUT_CODE_BEGIN_
    _INPUT_CODE_END_

    之间,以及
    _OUTPUT_CODE_BEGIN_
    _OUTPUT_CODE_END_

    之间,前者填写输入代码,后者填写输出代码,其他代码修改无效。

    系统自动生成了以下变量:
    ppData, 目标对象的二级指针,当赋值过程是调用其他代码生成目标类型的指针时,可用此变量为目标对象赋值,例如,产品代码中有一个函数,功能是解析一个函数的声明代码返回一个函数对象的指针,可以用类似于:
    *ppData = pFunc;
    的形式实现对目标对象的赋值。
   
    pData为目标类型的指针。和ppData一样,VU会保证指针的有效性,不需要申请内存。

    vcbData,过渡变量,即用于从表格中读取数据的变量。

    count_vcbData,数组计数变量,类型为long,如果过渡类型是数组,会自动添加此变量。请参考新建回调赋值:高级

    count_xxx,数组计数变量,类型为long,如果过渡类型是复合类型,且复合类型的某些成员含有数组,则针对每个数组变量会添加数组计数变量,用途与count_vcbData一样,请参考新建回调赋值:高级

    在输入代码中,用户需要利用vcbData中的数据,构建pData或ppData的数据,在输出代码中,用户需要利用pData中的数据,构建vcbData的数据。

    例如,对于CString类型,可以在输入代码部分填写:
    *pData = vcbData;
    在输出代码部分填写:
    vcbData = (LPCTSTR)(*pData);
    这样就完成了代码的编写。总之,输入就是将表格中读到的数据赋给目标变量,输出则相反。更多信息,请参考新建回调赋值:高级