#c# #teamcity #code-coverage #dotcover
#c# #teamcity #покрытие кода #dotcover
Вопрос:
У меня есть существующий проект на C # 4, для которого я проверил тестовое покрытие с помощью TestDriven.Net и функция покрытия Visual Studio, т. е. Тест с помощью -> Покрытие из контекстного меню.
Проект содержит некоторый код, который я не хочу охватывать, и я решил эту проблему, добавив [ExcludeFromCodeCoverage]
для этих типов и методов.
Мы только что обновили TeamCity до версии 6.0.3, и я добавил покрытие dotCover на этапе сборки NUnit.
Мне удалось удалить покрытие для внешних сборок, таких как NHibernate, в разделе «Фильтры» (явно указав сборки, для которых я хочу покрытие), но я затрудняюсь с тем, как исключить типы и методы из покрываемых сборок.
Ответ №1:
Хорошо, Мартин, я понял это! Потребовался всего час случайного нажатия на синтаксис фильтра … когда в документации сказано добавить фильтр, подобный этому
:myassembly=*;type=*;method=***
Они действительно это имеют в виду… когда что-либо в <>
полностью заменяется вами, а все остальное является литералом
:<myassembly>;type=<filter>;method=<filter>
Итак, фильтр, который я хотел, должен был включать одну сборку (из множества сборок), а затем исключать несколько пространств имен в этой сборке. Я написал
:Omnyx.Scanner
-:Omnyx.Scanner;type=Omnyx.Scanner.Simulation.*
-:Omnyx.Scanner;type=Omnyx.Scanner.ToolsCommon.*
Комментарии:
1. После изучения исходного кода dotCover (естественно, с помощью dotPeek) мне удалось выяснить, как указать несколько фильтров в командной строке . Вы разделяете фильтры с помощью
;
, и фильтр может быть либо фильтром сборки, либо фильтром типов , либо фильтром методов. Итак, чтобы включить AssemblyA, но исключить типы в пространстве имен AssemblyA.Blah::AssemblyA;-:type=AssemblyA.Blah.*
2. @bruceboughton Как вы заставили dotPeek посмотреть исходный код dotCover? Мне не терпелось написать инструмент F #, который проверяет текущий каталог с помощью фильтра сборки аргументов командной строки и отображает список исключенных / включенных сборок, и это сделало бы мою мечту реальностью!
Ответ №2:
Взгляните на анализ покрытия со страницы командной строки — Применение фильтров. Похоже, вы можете настроить исключения в разделе Фильтры, аналогично тому, как вы исключали целые сборки.
Допустим, вы хотите игнорировать вызываемый метод, DoStuff
содержащийся в классе MyStuff
, который находится в MyAwesomeAssembly
библиотеке. Тогда ваш XML-файл dotCover должен выглядеть примерно так:
<Filters>
<ExcludeFilters>
<FilterEntry>
<ModuleMask>MyAwesomeAssembly</ModuleMask>
<ClassMask>MyStuff</ClassMask>
<FunctionMask>DoStuff</FunctionMask>
</FilterEntry>
</ExcludeFilters>
</Filters>
Отказ от ответственности: я не использую dotCover, поэтому я не уверен на 100%, что это действительно сработает.
Комментарии:
1. Адам, спасибо за твой вклад. Как указано в вопросе, я хотел бы использовать раздел «Фильтры» на этапе сборки в TeamCity. Я буду прибегать к XML config только в том случае, если это последний вариант (и как использовать файлы dotCover XML config в TeamCity?).
2. @Martin Ах, извините, я неправильно понял, что вы имели в виду. Похоже, stealf предусмотрел то, что вам нужно в их ответе. Надеюсь, это поможет. 🙂
3. ModuleMask, ClassMask и FunctionMask должны быть атрибутами, а не элементами. Кроме того, в каждой маске должны быть указаны полные имена, соответствующие пространству имен. Я также обнаружил, что вы можете легко изменить файл из VS, используя команду меню dotCover -> Редактировать фильтры покрытия ….
4. Подробнее об использовании фильтров dotCover см. в разделе Фильтрация с помощью dotCover .
5. Стоит упомянуть, что использование этой опции означает, что вы можете получить те же результаты при локальном запуске dotCover и использовать фильтрацию в системе управления версиями, а не определять внутри инструмента CI, но это зависит от ваших предпочтений.
Ответ №3:
Это то, что в документах TeamCity говорится о параметрах фильтра:
Укажите сборки для профилирования по одной в строке, используя следующий синтаксис: :myassembly=;type=;method=*
Используйте -:myassembly, чтобы исключить сборку из покрытия кода. Здесь поддерживается подстановочный знак Asterisk (*).
Комментарии:
1. Я прочитал документы, но не могу заставить их работать. Рабочий образец был бы великолепен.