Как проверить внутри цикла for (модульное тестирование)
Я использую 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.
3 ответа
Ваше определение выглядит подозрительно:
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
, что на один больше, чем истинный "максимальный" или "последний" (лицемерно, я знаю. Но кто вообще определяет эти соглашения?).
Если вы вставляете тестовый пример в myFunction() и запускаете его, он должен автоматически проходить через обе ветви, так как значения enum, меньшие MAX_ENUM_VAL, удовлетворяют ветви 'true', а MAX_ENUM_VAL удовлетворяет ветви 'false'. VectorCAST понимает переходы в циклах for как условные переходы по отношению к среднему подоператору. Это можно увидеть, вставив контрольные примеры базового пути, а затем прочитав раздел примечаний сгенерированных контрольных примеров.
В зависимости от покрытия кода и параметров, которые вы выбираете, вы можете включить или отключить условия ветвления для переменных управления циклом. Идея измерения покрытия кода цикла состоит в том, чтобы убедиться, что операторы внутри цикла выполняются до конца, т.е. нет. итераций, чтобы убедиться, что выражения оцениваются в соответствии с дизайном. Это может произойти после того, как в середине цикла будет сгенерировано какое-то исключение, и управление выйдет из цикла for до завершения указанных итераций цикла.
Глядя на пример вашего цикла for, если цикл выполняется для счетчика =MIN_ENUM_VAL до counter=MAX_ENUM_VAL, тогда инструмент покажет, что вы рассмотрели как истинную, так и ложную ветвь счетчика условий < MAX_ENUM_VAL, если тело цикла не имеет некоторого условия, которое вызывает перерыв перед counter=MAX_ENUM_VAL.