Сегодня мне было поручено добавить unit test анализ покрытия на нашу базу кода. Сегодня также вышел iOS 7.1, выпущенный вместе с XCode 5.1. Из примечаний к выпуску:
Инструмент gcov для тестирования покрытия кода был переопределен. Новая версия использует инструмент llvm-cov из проекта LLVM. Он функционально эквивалентен старой версии для всех значимых функций. Расположение gcov внутри Xcode также перемещено, используйте xcrun для его вызова. Если вы обнаружили проблемы, сообщите об ошибках. Для этой версии вы все равно можете использовать старую версию gcov из GCC, доступную как gcov-4.2. 11919694 обновлено
Я понял это только после нескольких учебных : сообщений, правильно настроив мою среду - генерируя файлы .gcda/.gcno в папках сборки симулятора при тестировании - и имея инструменты генерации отчетов здесь попробуйте проанализировать их в отчете. (это файл. /getcov script, который собирает переменные среды для перехода к сценариям lcov-1.10 для создания отчета)
Первым препятствием было то, что новая связанная программа gcov
не поддерживает аргумент -v
, чтобы получить версию, которая является первым шагом инициализации lcov
. Как уже не было стартера, но, прочитав примечания к выпуску выше, я модифицировал lcov
script, чтобы использовать старую версию gcov-4.2
и получил это решение.
Тем не менее, lcov
ошибочно обнаружил ошибки в обработке моих файлов данных о покрытии. Это сгенерировало отчет, возможно, первые 10 или около того файлов в алфавитном порядке в моем проекте. Не особенно полезно. Выход ошибки был минимальным и бесполезным:
geninfo: ERROR: GCOV не удалось (build_artifacts)/(class_that_errored).gcda!
Я изменил lcov
script, чтобы напечатать ошибку, которую он получал (что только дало 11
, к сожалению, не удалось найти ссылку в коде gcov (-io).c) и продолжить работу отказавшись, поэтому в отчете оставалось гораздо больше файлов, но, вероятно, 85% моих исходных файлов были ошибочными, как указано выше.
Единственный шаблон, который я мог различить между файлами, которые были успешно завершены в отчете, и те, которые выкидывали ошибку, заключались в том, что любой файл, который использовал объявление строки в строке, не удался. Ни один из файлов, передавших используемые блоки каким-либо образом, и все файлы, которые я проверил, не удались, содержат блоки. Странно.
Затем я понял, что могу открыть отдельные .gcda файлы в CoverStory, включая те, которые были ошибочны в lcov
script. В окне сообщения ниже отчета о охвате все файлы с ошибкой имели предупредительные сообщения:
(class_that_errored).gcno: нет строк для '__copy_helper_block _'
(class_that_errored).gcno: нет строк для '__destroy_helper_block _'
Моя лучшая гипотеза на этом этапе заключается в том, что новый XCode 5.1 генерирует файлы .gcda, которые старая программа gcov-4.2
не имеет возможности обрабатывать объявления блоков.
Но я исчерпал все, что я могу придумать, чтобы попытаться, поэтому я здесь, чтобы спросить, есть ли у кого-то знания, которые я пропустил, или есть идеи для дальнейшего отладки. Или, если кто-то успешно оценивает охват тестирования, так как сегодня XCode 5.1 обновляется с новым gcov
, я бы с удовольствием узнал о любых изменениях, которые вам пришлось внести.