Я сейчас пишу юнит-тесты для Qt
проект. Я хотел использовать статистику, представленную в Jenkins через Cobertura плагин (внизу gcov
используется для получения статистики).
:~$ gcov -v
gcov 5.4.0 20160609
:~$ gcc -v
gcc version 5.4.0
Однако после того, как я посмотрел на таблицу (см. Ниже), я был очень удивлен, увидев плохое покрытие, особенно условных. Для первого (см. Распределение покрытия по файлам) Я думал, что я на самом деле сделал, так как код имеет только три if
s (каждый с одним условием), и мои тесты охватывают все (проверил это также с помощью отладки, чтобы убедиться). Поэтому я действительно запутался в том, что на самом деле означают эти цифры и как их интерпретировать, чтобы улучшить мои юнит-тесты.
Я даже начал думать, что некоторые из плохих результатов могут быть связаны с использованием Qt
поскольку это не совсем чистый C ++, и все «дополнения» (слоты, сигналы, файлы MOC и т. д.) могут быть чем-то, что gcov
не может справиться должным образом.
Проверка аннотированного списка источников с отображаемой красной / зеленой маркировкой покрытия должна помочь.
Числа внутри цветных полос — это количество строк, следовательно, 47/108 означает, что 47 строк кода из 108 строк, которые контролируются условными обозначениями, имеют покрытие.
Для каждого условия вам нужно как минимум два модульных теста: по одному для каждой ветви.
Если есть && или || в условиях — или где-либо еще (например, логическое выражение) каждая комбинация должна быть выполнена для достижения 100%.
Также не забывайте
a = (j == 0) ? c : d;
требуется (как минимум) два теста!
Также, если вы используете C ++, смотрите Почему gcc 4.1 + gcov сообщает о 100% покрытии филиала, а более новые (4.4, 4.6, 4.8) сообщают о 50% для "р = новый класс;" линия?
Других решений пока нет …