0

我正在使用 VectorCAST 进行单元测试,使用 Green Hills 编译器和 Renesas v850e2v3 微控制器,VectorCAST 表明我在下面的 for 循环中有两个分支要测试。

typedef enum
{
    MIN_ENUM_VAL = 0x00,
    ENUM_VAL_1   = 0x01,
    ENUM_VAL_2   = 0x02,
    MAX_ENUM_VAL
} Enumeration_T;

void myFunction (void)
{
    int counter;
    for(counter = MIN_ENUM_VAL; counter < MAX_ENUM_VAL; counter++)
    {
        //Do something.
    }

    //Do something else.
}

如何测试这些分支?真的,我不知道如何在 for 循环中进行测试。

4

3 回答 3

0

您的定义看起来很可疑:

typedef enum
{
    MIN_ENUM_VAL = 0x00,
    ENUM_VAL_1   = 0x01,
    ENUM_VAL_2   = 0x02,
    MAX_ENUM_VAL
} Enumeration_T;

你真的是说第一个enum值是1?怎么样0?这是法律价值吗?MIN_ENUM_VAL真的吗0?或者1?我本来期望:

MIN_ENUM_VAL = 0x00,
ENUM_VAL_1   = MIN_EUM_VAL,

MAX_ENUM_VAL是一个更常规的定义。不正确,但有规律。正确的“最大值”是2- 你所拥有的“正常”定义是LAST_ENUM_VAL,它比真正的“最大值”或“最后一个”多一个(虚伪,我知道。但是谁定义了这些约定呢?)。

于 2016-09-12T12:10:18.437 回答
0

如果您在 myFunction() 下插入一个测试用例并运行它,它应该会自动通过两个分支,因为小于 MAX_ENUM_VAL 的枚举值满足“真”分支,而 MAX_ENUM_VAL 满足“假”分支。VectorCAST 将 for 循环中的分支理解为相对于中间子语句的条件分支。通过插入基础路径测试用例,然后阅读生成的测试用例的注释部分可以看到。

于 2015-11-26T16:41:08.790 回答
0

根据您选择的代码覆盖率和选项,您可以启用或禁用循环控制变量的分支条件。测量循环代码覆盖率背后的想法是确保循环内的语句执行到最后,即不执行。迭代以确保表达式按照设计进行评估。它可能发生在循环进行到一半之后,会产生一些异常,并且在指定的循环迭代完成之前,控制将从 for 循环中退出。

查看 for 循环的示例,如果循环执行 counter=MIN_ENUM_VAL 到 counter=MAX_ENUM_VAL,那么该工具将显示您已经覆盖了条件计数器 < MAX_ENUM_VAL的 True 和 False 分支,除非循环体有一些条件调用在 counter=MAX_ENUM_VAL 之前中断。

于 2021-11-14T06:49:32.607 回答