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


数组与序列赋值/分段赋值

数组的一般规则
    可以对数组的各个项分别填写数据,如下图的case 1,也可以对数组整体填写数据,如下图的case 2,如果数组整体填写了数据,且某些项也填写了数据,则项的数据将覆盖整体中的对应数据,如下图的case 3,数组的前三项的赋值结果为{1,2,30}。
   
 

不能将数组设为NULL的情形
    结构或类成员中的数组,不能设为NULL,如下代码,pData->arr != NULL恒为真,即该条件的假值不可能覆盖,换句话说,该条件是多余的。原因是pData->arr的值是pData指针的值加arr的偏移量,即其值为(unsigned int)pData + sizeof(int),不可能为0。

   
struct XData
    {
        int a;
        int arr[10];
        int b;
    };

    int XDataTest(XData* pData)
    {
        if(pData != NULL && pData->arr != NULL)
            return pData->arr[0];
        return 0;
    }

一维数组设为NULL
    一维数组,可在表格中直接填NULL,像一般指针一样。

二维和三维数组设为NULL
    由于编译器不允许将指针转换为二维和三维数组,二维和三维数组需要用代码方式设置为NULL,示例如下:
    //被测函数
    int arrtest(int data[10][10])
    {
        if(data == NULL)
            return 0;
        return data[0][0];
    }
    要将data设为NULL,需增加一个用例代码(在用例代码窗口,点击),并切换到显示完整代码模式,将参数data改为直接传递0,如下图:

   


从文件导入数据或读取数据
    从文件导入数据,是指拷贝文件中的数据到表格中,拷贝后可以在表格中进行修改。
    从文件读取数据,是指VU在解析数据的过程中,直接从文件读取。
    数据文件,必须保存在TestProject/VuxData文件夹下,可以自建立下级文件夹。
    从文件导入数据,方法是:在单元格非编辑状态下,右键菜单选择“文件(针对单元格)”,再选择“从文件导入文本数据”。
    从文件读取数据,方法是:在单元格非编辑状态下,右键菜单选择“文件(针对单元格)”,再选择“从文件读取数据”。

全体赋值与个别赋值
   此赋值方式仅适用于非指针数组,如int[N], short{N1][N2], char{N1][N2]{N3],不适用于指针数组,原因是此赋值方式只针对连续内存。
    此赋值方式在数组变量所在行填值,如下图,是双击单元格时,自动生成的赋值,表示全部赋值为0,将0改为N,则全部赋值为N。这是全体赋值。

   

    如需对个别项赋值,可以直接指定序号进行赋值,如下图,表示arrs[1][2][3]=22,arrs[11][12][13]23。

   

   个别赋值的序号可以使用范围,如:

   

    以上可以结合使用,如下图,表示首先全部项赋值为1,再将指定的项赋值为123:

   

序列赋值
   
序列赋值是针对复合类型的数组的一种简化赋值方式,如下图,case 1和case 2的赋值结果是相同的。case 2对数组的各个项分别填值,比较麻烦,尤其是数据类型比较复杂时,需要展开太多的行,且切换到表格模式后,也会有很多行。case 1使用了序列赋值,语法是使用英文逗号(,)分隔多个值,系统会自动分配到数组各项的对应位置。
    序列赋值名为赋值,实际上适用于输入和输出。
    序列赋值是很常用的功能,例如,链表、映射表等集合都是利用回调赋值通过数组来赋值的,请参考回调赋值概述

   


分段赋同一值
    用于对连续的一些项赋相同的值 ,语法为:[B..E]V,B为起始index,E为结束index,V为从B到E各项的同一值。如下图case 1:[1..4]12,相当于:
    pDatas[1]->pBase->a = 12;
    pDatas[2]->pBase->a = 12;
    pDatas[3]->pBase->a = 12;
    pDatas[4]->pBase->a = 12;
    可以分为多段来赋值,如下图case 2:[1..4]12,[6..9]18,相当于:
    pDatas[1]->pBase->a = 12;
    pDatas[2]->pBase->a = 12;
    pDatas[3]->pBase->a = 12;
    pDatas[4]->pBase->a = 12;
    pDatas[6]->pBase->a = 18;
    pDatas[7]->pBase->a = 18;
    pDatas[8]->pBase->a = 18;
    pDatas[9]->pBase->a = 18;

   

分段赋不同值
   
用于对连续的一些项赋不同值 ,语法为:[B..E]{V1,V2,...,Vn},B为起始index,E为结束index,V1到Vn是从B到E各项的按顺序分配的值。如下图case 1:[2..5]{1,2,3,4},相当于:
    pDatas[2]->pBase->a = 1;
    pDatas[3]->pBase->a = 2;
    pDatas[4]->pBase->a = 3;
    pDatas[5]->pBase->a = 4;
    可以分为多段来赋值,如下图case 2:[2..5]{1,2,3},[20..30]{10,20,30},相当于:
    pDatas[2]->pBase->a = 1;
    pDatas[3]->pBase->a = 2;
    pDatas[4]->pBase->a = 3;
    pDatas[5]->pBase->a = 3;
    pDatas[20]->pBase->a = 10;
    pDatas[21]->pBase->a = 20;
    pDatas[22]->pBase->a = 30;
    pDatas[23..30]->pBase->a = 30;
    值的数量不足时,不足部分使用最后的值。

   

数组复合赋值的综合说明
    1、在数组变量(类型带[]的变量)中填值时,需用{}括起全部值,在数组成员变量中填值时,不能用{}起全部值。
    2、如不指定序号,则自动计算序号,如{1,2,3},或1,2,3;
    3、用[N]xx指定序号,如{[0]1,[1]2};
    4、用[B..E]指定范围序号,如{[0..1]123};
    5、用{}指定某个范围内各项的值,如{[0..4]{1,2,3}},值不足时,不足部分使用最后一个值;
    6、用...表示其他项,如{1,2,...3};
    7、以上可以综合应用,如{1,2,[4]4,[6..8]{6,7,8},..9}。

分段赋值部分无效的原因及解决
    如果数组较大,为了保证性能,表格将只显示部分项,可在“设定”>“功能”>“数组的数据表格限制”中调整显示的项数。在表格中,点击数组已显示的最后一项后的“More”,可显示后续的项。
    分段赋值时,如序号超过已显示的项,超过部分赋值无效。解决办法:点击“More”,使最大序号对应的项显示出来,赋值即可全部有效。