Как исключить проекты с именами, заканчивающимися на ".Test" из моего анализа покрытия кода в VS2012.

Мое решение настроено на проекты под названием "ProjectName" с "ProjectName". Тесты, содержащие мои модульные тесты. Я хотел бы исключить тестовые проекты из анализа покрытия кода в VS 2012 (MS Test) и успешно справился с этим, добавив атрибут ExcludeFromCodeCoverage к каждому тестовому классу, как описано здесь.

Поскольку число классов тестов растет, было бы неплохо исключить все тестовые сборки. Я хочу использовать файл.runsettings, также описанный в этой ссылке MSDN, но, похоже, вам не повезло.

Вот мой файл.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>
              <Exclude>
                <ModulePath>.*tests.*</ModulePath>
                <ModulePath>.*Tests.*</ModulePath>>
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

Это приводит к пустым результатам, генерируемым для Code Coverage, если я прокомментирую весь блок <Exclude> я получаю покрытие кода во всех проектах решения, включая тесты (как и ожидалось, я просто хотел убедиться, что добавление файла runSettings wasn не вызывая проблем).

Я попытался добавить:

<Include>
  <ModulePath>.*\.dll$</ModulePath>
  <ModulePath>.*\.exe$</ModulePath>
</Include>

Но опять же, я получаю пустые результаты. У меня создалось впечатление, что пустой (или несуществующий) блок Include будет включать все по умолчанию, если не согласован блоком Exclude, поэтому я не думаю, что это строго требуется.

Может кто-то указать мне верное направление? Я вижу из этого другого вопроса, что я не одинок, пытаясь исключить тесты, но я хотел бы сделать это на уровне сборки, и MSDN, похоже, предлагает мне это сделать.

Ответ 1

Существует связь с вопросом периода, как было упомянуто здесь. Если вы измените раздел исключения на этот

<ModulePath>.*tests.dll</ModulePath>
<ModulePath>.*Tests.dll</ModulePath>

или это

<ModulePath>.*\.tests\..*</ModulePath>
<ModulePath>.*\.Tests\..*</ModulePath>

он будет работать

Ответ 2

Вы можете исключить его, исключив DLL проекта или самим именем проекта. Например -

<ModulePaths>
 <Exclude>
  <ModulePath>Fabrikam.Math.UnitTest.dll</ModulePath>  
    <!-- You can add more ModulePath nodes here. -->
 </Exclude> 
</ModulePaths>

Эта ссылка MSDN полезна для этого.