我使用VectorCAST进行单元测试,使用Green Hills编译器和瑞萨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循环中进行测试。
发布于 2015-11-27 00:41:09
如果您在myFunction()下插入一个测试用例并运行它,它应该自动通过两个分支,因为小于MAX_ENUM_VAL的枚举值满足'true‘分支,而MAX_ENUM_VAL满足'false’分支。VectorCAST将for循环中的分支理解为相对于中间子语句的条件分支。可以通过插入基本路径测试用例,然后阅读生成的测试用例的注释部分来查看。
发布于 2016-09-12 20:10:18
你的定义看起来很可疑:
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
,它比真正的“最大值”或“最后”值多一个(我知道,虚伪。但是到底是谁定义了这些约定呢?)
发布于 2021-11-14 06:49:33
根据您选择的代码覆盖率和选项,您可以为循环控制变量启用或禁用分支条件。测量循环代码覆盖率背后的想法是确保循环中的语句执行到结束,即no。迭代次数,以确保表达式按照设计进行计算。这可能会在循环中途发生,此时会生成一些异常,并且在指定的循环迭代完成之前,控制将从for循环中退出。
看看你的for循环的例子,如果循环从counter=MIN_ENUM_VAL执行到counter=MAX_ENUM_VAL,那么工具将显示你已经覆盖了condition counter < MAX_ENUM_VAL的True和False分支,除非循环体有一些在counter=MAX_ENUM_VAL之前调用break的条件。
https://stackoverflow.com/questions/27160844
复制相似问题