Я пишу программу в C, используя cmocka для ее юнит-тестирования. Мне удалось все настроить в Eclipse, используя MinGW на Windows 10.
Используемая версия G CC - 9.2.0
Флаги для компиляции:
-I"C:\MinGW\cmocka\include" -O0 -g3 -p -pg -ftest-coverage -fprofile-arcs -Wall -c -fmessage-length=0 -v -fPIC
Флаги для компоновщика:
-L"C:\MinGW\cmocka\lib" -p -pg -ftest-coverage -fprofile-arcs
Мне интересно, почему gcov утверждает, что некоторые строки кода никогда не выполняются?
Примеры:
Вы можете видеть, что вышеуказанная функция выполнена на 100%.
Над тестами, выполненными для получите 100% покрытие.
Выше видно, что последняя строка, кажется, никогда не выполняется
С помощью тестов, приведенных выше, я могу получить только 80% покрытия. Согласно статистике, 5 строк инструментированы, только 4 выполнены. Как достичь 100%?
Выше видно, что это еще хуже, поскольку gcov утверждает, что оператор return никогда не выполнялся!
Тест должен быть неверно доказан на gcov, явно - или я ошибаюсь в этом предположении - почему?
Как это исправить ?
РЕДАКТИРОВАТЬ:
После запуска gcov из командной строки, это вывод
10: 508:static void vKoCoUpdateDelay(void)
-: 509:{
10: 510: if (0U == control.transfer.u8CyclicDelay)
-: 511: {
1: 512: control.transfer.u8CyclicDelay = KOCO_U8_MESSAGE_DELAY;
-: 513: }
-: 514: else
-: 515: {
9: 516: --control.transfer.u8CyclicDelay;
-: 517: }
10: 518:}
Cleary здесь gcov сообщает, что выполняется 100% кода, также последний строка выполняется 10 раз.