Покрытие кода TeamCity для кода C++

У нас есть проект, использующий C#, C++/Cli и некоторый собственный код C++. Мы используем TeamCity для сборки и тестирования.

Мы запускаем тесты с помощью vstest.console (исполнитель тестов VS2012).

Для управляемого кода для покрытия кода используется dotCover (интегрированный в TeamCity). Однако он не работает с собственным кодом C++ (чего и следовало ожидать).

Как получить результаты покрытия кода нашими модульными тестами для нативных частей C++ в TeamCity? В идеале решение должно быть бесплатным.


person Wilbert    schedule 20.08.2013    source источник


Ответы (1)


Мы используем Bullseye Coverage для покрытия кода C++. Затем мы используем предоставленный инструмент covxml для преобразования двоичных файлов покрытия в XML-файл, из которого затем считываем ряд полезных атрибутов для функционального и условного покрытия (например, fn_total, fn_cov, cd_total, cd_cov) и предоставляем их TeamCity через сообщения службы статистики с помощью предопределенные ключи покрытия.

Было немного работы по настройке, но я думаю, что TeamCity до сих пор не поддерживает какой-либо инструмент покрытия C++, поэтому наше решение все еще хорошо работает для нас спустя годы.

Изменить: я загрузил код синтаксического анализа в формате XML для нашего внутреннего домашний инструмент для Gist.

person Jonathon Rossi    schedule 20.08.2013
comment
Было бы здорово, если бы вы могли поделиться своими скриптами разбора xml :) - person tauran; 09.01.2014
comment
Конечно, ничего секретного в этом нет. Я загрузил его в суть, см. пост выше. Я не думаю, что мы используем последнюю версию Bullseye (однако определенно более новую, чем комментарии в коде), поэтому YMMV, но, если я правильно помню, этот формат файла был опубликован авторами, поэтому он не должен быть нарушен. - person Jonathon Rossi; 09.01.2014
comment
Вот документация на веб-сайте Bullseye: bullseye.com/help/ref-covxml. html - person Jonathon Rossi; 09.01.2014
comment
Это здорово, спасибо, что поделились. Ваш код ссылается на класс ReportHelper, который отсутствует. В любом случае, мне было бы достаточно, если бы вы сказали мне, какие ключи покрытия teamcity вы сопоставили с атрибутами результата «яблочко». Спасибо! - person iwo; 25.02.2014
comment
@iwo Извините, я добавил ReportHelper.cs в Gist. Я также добавил OutputTeamCityServiceMessages.cs, в нем просто есть метод, который выводит служебные сообщения TeamCity на стандартный вывод. IIRC для двух нижних установлено значение 100, в противном случае веб-интерфейс TeamCity ломался, но это может больше не понадобиться. «B» предназначен для покрытия блоков, поэтому я все равно использовал его для ветвей. - person Jonathon Rossi; 25.02.2014