Как мне исключить типы и методы из-под покрытия dotCover в TeamCity?

#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. Я прочитал документы, но не могу заставить их работать. Рабочий образец был бы великолепен.