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,如下图:

   


序列赋值
   
序列赋值是针对复合类型的数组的一种简化赋值方式,如下图,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;
    值的数量不足时,不足部分使用最后的值。

   

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