+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 86.57 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Изменение настроек покрытия кода в Visual Studio 11.

24.05.2012 16:02
Vitaly Zayko

Данная статья является переводом публикации из Sudhaka"s WebLog " Customizing Code Coverage in Visual Studio 11 ".

Инструмент Code Coverage в Visual Studio 11 по умолчанию анализирует все бинарные (exe / dll) файлы решения, которые загружаются во время выполнения модульного тестирования. Мы советуем вам придерживаться этого пути, поскольку это срабатывает практически во всех случаях.

Однако, могут возникнуть ситуации, когда вам понадобиться пере настроить такое поведение. Наиболее общим случаем может являться необходимость включения / исключения определенных двоичных файлов из покрытия кода. При выполнении таких действий может возникнуть ситуация, когда новые сборки, добавляемые в проект, могут выпасть из покрытия. Тем не менее, если такая необходимость все-таки возникнет, вы можете кастомизировать настройки покрытия кода. Другим распространенным случаем является необходимость настройки путей поиска символьных файлов для двоичных файлов, символьные данные которых не развернуты локально.

В данной статье мы обсудим настройку покрытия кода для подобных сценариев.

Файл .runsettings.

Расширенные настройки покрытия кода в VS11 содержатся в файле .runsettings. Данный файл является конфигурационным для инструментов тестирования в VS11.

Некоторые из вас, кто уже использовал VS 2010, знакомы с файлами .testsettings. Вы можете спросить: почему этот же файл не используется в VS11? Причина этого в том, что файлы .testsettings используются исключительно в модульных тестах MSTest в VS 2010. Модульное тестирование в VS11 использует не только MSTest, но и адаптеры тестирования от независимых разработчиков, например, NUnit и xUnit.net. Файл .testsettings с ними работать не будет. Поэтому был создан файл .runsettings.

Для настройки покрытия кода вам понадобится добавить файл .runsettings к вашему решению. В данный момент для этого не существует встроенного шаблона, выполняющего эту операцию. Добавьте этот файл как xml и отредактируйте эго содержимое:

  1. Щелкните правой на решении, затем Add New Item -> XML File, сохраните файл как CodeCoverage.runsettings (важно использовать именно это расширение).
  2. Скопируйте данные, которые будут приведены ниже, в этот файл.
  3. Отредактируйте настройки покрытия кода, как описано в следующей секции.
  4. Объявите эти настройки основными при помощи Test -> Test Settings -> Select Test Settings File.

После этого указанные настройки будут использоваться всякий раз, когда вы анализируете покрытие кода.

Основные сценарии настройки.

Настройка набора двоичных файлов для анализа на покрытие.

В этом разделе мы настроем подключение / исключение двоичных файлов из покрытия кода. При использовании файла .runsettings имеется два способа выполнения этой задачи.

Настройка исключением.

Этим способом можно включить все файлы, за исключением некоторых. Такой путь подходит, если код интересующих файлов часто меняется, и постоянно появляются новые бинарники: вам может потребоваться, чтобы новые файлы автоматически включались в покрытие. В то же время, у вас есть двоичные файлы, которые вы не хотели бы включать в покрытие, например, авто тесты. Они будут исключены.

Оставьте раздел <include> пустым, чтобы подключить все сборки. Укажите лишь имена и пути к тем сборкам, которые вы хотите исключить.

 <ModulePaths>
   <Include>
     <!-- Do not specify any includes. This will attempt to include all binaries -->
   </Include>
   <Exclude>
     <!-- Exclude modules that't to be processed, by their name / path -->
     <ModulePath> .*MyCompany.MyTests1.dll</ModulePath>
     <ModulePath> .*CPPUnitTestFramework.*</ModulePath>
   </Exclude>
 </ModulePaths>
 

Настройка включением.

Этот метод позволяет подключить лишь те файлы, что нам нужны, при этом исключив все остальные. Такой путь хорошо использовать, когда назначение двоичных файлов хорошо известно, и вы хотите подключить только эти файлы.

Перечислите подключаемые файлы. Раздел <exclude> оставьте пустым, чтобы исключить остальные.

 <ModulePaths>
   <Include>
     <!-- Include modules of interest, by their name / path -->
     <ModulePath> .*MyCompany.MyComponent.dll</ModulePath>
   </Include>
   <Exclude>
     <!\uc1\u8212?- Do not specify any excludes. Anything not included will get excluded -->
   </Exclude>
 </ModulePaths>
 

Хотя разделы include и exclude могу использоваться одновременно, такое смешение может запутать. Поэтому старайтесь придерживаться одного из перечисленных механизмов настройки.

Указание путей поиска символьной информации.

Анализ покрытия кода требует наличия символьной информации (PDB) для исследуемых двоичных файлов. Для файлов, собранных вашим решением, символьная информация обычно представлена вместе с двоичной, и анализ покрытия будет работать автоматически. В некоторых случаях вы можете ссылаться на внешние, по отношению к вашему решению, двоичные файлы. В такой ситуации вам потребуется указать путь поиска символьной информации в файле rusettings.

 <SymbolSearchPaths>
   <Path> >\\\\mybuildshare\\builds\\ProjectX</Path>
 </SymbolSearchPaths>
 

Здесь вы можете указывать пути как к локальным, так и удаленным папкам. Однако имейте в виду, что загрузка символьной информации может занимать продолжительное время, особенно, когда используется удаленный путь, содержащий большое количество двоичных файлов. Наилучшим выходом будет копирование символьных файлов вместе с бинарными, без указания пути поиска.

Пример файла .runsettings.

Ниже приведен пример файла runsettings. Используйте его при создании собственного файла настроек и вносите изменения по мере необходимости.

 <?xml version= "1.0 " encoding= "utf-8 "?>
 <RunSettings>
   <DataCollectionRunSettings>
     <DataCollectors>
       <DataCollector friendlyName= "Code Coverage " 
                      uri= "datacollector://Microsoft/CodeCoverage/2.0 " 
                      assemblyQualifiedName= "Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector,
                      Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, 
                      PublicKeyToken=b03f5f7f11d50a3a ">
         <Configuration>
           <CodeCoverage>
             <ModulePaths>
               <!--
 About include/exclude lists:
 Empty "Include" clauses imply all; empty "Exclude" clauses imply none.
 Each element in the list is a regular expression (ECMAScript syntax).
 An item must first match at least one entry in the include list to be included.
 Included items must then not match any entries in the exclude list to remain included.
 It is considered an error to exclude all items from instrumentation as no data would be collected.
 -->
               <Include>
                 <ModulePath> .*\\\\UnitTestProject1\\.dll</ModulePath>
               </Include>
               <Exclude>
                 <ModulePath> .*CPPUnitTestFramework.*</ModulePath>
               </Exclude>
             </ModulePaths>
             <UseVerifiableInstrumentation> True</UseVerifiableInstrumentation>
             <AllowLowIntegrityProcesses> True</AllowLowIntegrityProcesses>
             <CollectFromChildProcesses> True</CollectFromChildProcesses>
             <CollectAspDotNet> False</CollectAspDotNet>
             <!--
 Additional paths to search for symbol files. Symbols must be found for modules to be instrumented.
 If symbols are alongside the binaries, they are automatically picked up. Otherwise specify the here.
 Note that searching for symbols increases code coverage runtime. So keep this small and local.
 
 <SymbolSearchPaths>              
   <Path>C:\\Users\\User\\Documents\\Visual Studio 11\\Projects\\ProjectX\\bin\\Debug</Path>
   <Path>\\\\mybuildshare\\builds\\ProjectX</Path>
 </SymbolSearchPaths>
 
 -->
             <Functions>
               <Exclude>
                 <Function> ^std::.*</Function>
                 <Function> ^ATL::.*</Function>
                 <Function> .*::__GetTestMethodInfo.*</Function>
                 <Function> ^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>
                 <Function> ^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>
                 <Function> .*::YOU_CAN_ONLY_DESIGNATE_ONE_.*</Function>
               </Exclude>
             </Functions>
             <Attributes>
               <Exclude>
                 <Attribute> ^System.Diagnostics.DebuggerHiddenAttribute$</Attribute>
                 <Attribute> ^System.Diagnostics.DebuggerNonUserCodeAttribute$</Attribute>
                 <Attribute> ^System.Runtime.CompilerServices.CompilerGeneratedAttribute$</Attribute>
                 <Attribute> ^System.CodeDom.Compiler.GeneratedCodeAttribute$</Attribute>
                 <Attribute> ^System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute$</Attribute>
               </Exclude>
             </Attributes>
             <Sources>
               <Exclude>
                 <Source> .*\\\\atlmfc\\\\.*</Source>
                 <Source> .*\\\\vctools\\\\.*</Source>
                 <Source> .*\\\\public\\\\sdk\\\\.*</Source>
                 <Source> .*\\\\microsoft sdks\\\\.*</Source>
                 <Source> .*\\\\vc\\\\include\\\\.*</Source>
               </Exclude>
             </Sources>
             <CompanyNames>
               <Exclude>
                 <CompanyName> .*microsoft.*</CompanyName>
               </Exclude>
             </CompanyNames>
             <PublicKeyTokens>
               <Exclude>
                 <PublicKeyToken> ^B77A5C561934E089$</PublicKeyToken>
                 <PublicKeyToken> ^B03F5F7F11D50A3A$</PublicKeyToken>
                 <PublicKeyToken> ^31BF3856AD364E35$</PublicKeyToken>
                 <PublicKeyToken> ^89845DCD8080CC91$</PublicKeyToken>
                 <PublicKeyToken> ^71E9BCE111E9429C$</PublicKeyToken>
                 <PublicKeyToken> ^8F50407C4E9E73B6$</PublicKeyToken>
                 <PublicKeyToken> ^E361AF139669C375$</PublicKeyToken>
               </Exclude>
             </PublicKeyTokens>
           </CodeCoverage>
         </Configuration>
       </DataCollector>
     </DataCollectors>
   </DataCollectionRunSettings>
 </RunSettings>

Выбор файла runsettings во время выполнения модульного тестирования.

Модульные тесты могу запускаться в различном контексте. Ниже показано как указать нужный runsettings файл в конкретном случае.

При помощи Visual Studio IDE.

Выберите нужный файл при помощи Test -> Test Settings -> Select Test Settings File. Затем вызовите Analyze Code Coverage.

При помощи командной строки.

Запустить модульное тестирование из командной строки можно при помощи vstest.console.exe. Это - преемник MSTest. Он может запускать не только тесты MSTest, но и другие адаптеры, например, NUnit, xUnit, xUnit.net и др. Для запуска тестов используйте runsettings файл, как указано ниже:

  1. Запустите командную строку Visual Studio Native Tools.
  2. Выполните:

> vstest.console.exe TestAssembly.dll /EnableCodeCoverage /settings:CodeCoverage.runsettings

Во время сборки.

Модульное тестирование можно настроить на запуск в процессе сборки при помощи TFS Build Definition. Если у вас есть собственный файл runsettings, вы можете использовать его в процессе сборки. Ниже перечислены необходимые для этого действия:

  1. Отредактируйте описание процесса сборки. Откройте вкладку Process и измените настройки запуска тестов.
  2. Убедитесь, что будет использоваться Visual Studio Test Runner. Установите Options в Custom. Нажмите Browse для выбора файла с настройками.
  3. Укажите файл настроек и сохраните описание процесса сборки.

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года