VSTS / VSTest не соответствует [ExcludeFromCodeCoverage] - PullRequest
0 голосов
/ 04 сентября 2018

Я только недавно начал использовать Непрерывную интеграцию с VSTS и настроил конвейер, который включает в себя задачу «Visual Studio Test».

В рамках задачи есть возможность выполнить сканирование покрытия кода как часть теста.

Чтобы гарантировать, что мое покрытие кода охватывает только МОЙ код, и а) создали файл .RunSettings, включающий только генерируемые мной сборки, и б) есть некоторые части кода с атрибутом [ExcludeFromCodeCoverage].

Теперь, когда выполняется Analyze Code Coverage из Visual Studio (2017 Enterprise, 15.7.4), все работает так, как я ожидал, анализируется только моя сборка, а код, который я исключил, ошибается.

Однако при запуске конвейера VSTS такие ограничения не применяются, и тестируются ВСЕ сборки и ВСЕ код, включая специально исключенный код, что приводит к значительному снижению возраста покрытия кода%.

Не уверен, куда идти, так что надеемся, что сообщество S / O может помочь.

Обновление - используется файл RunSettings

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Configurations for data collectors -->
  <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>
              <Include>
                <ModulePath>.*\.dll$</ModulePath>
              </Include>
              <Exclude>
                <ModulePath>.*Tests.dll$</ModulePath>
                <ModulePath>.*moq.dll$</ModulePath>
              </Exclude>
            </ModulePaths>
            <UseVerifiableInstrumentation>False</UseVerifiableInstrumentation>
          </CodeCoverage>
        </Configuration>
      </DataCollector>

    </DataCollectors>
  </DataCollectionRunSettings>

1 Ответ

0 голосов
/ 05 сентября 2018

Здесь есть проблема: Файл RunSettings не используется в задаче TFS VsTest , вы можете перейти к обсуждению этой проблемы.

В качестве обходного пути вы можете использовать следующие форматы .RunSettings (добавьте UseVerifiableInstrumentation = False)

<?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>
           <UseVerifiableInstrumentation>False</UseVerifiableInstrumentation>
            <ModulePaths>
              <Include>
                <ModulePath>.*\\MyProjectName.*\.dll$</ModulePath>
              </Include>
              <Exclude>
                <ModulePath>.*Tests.dll$</ModulePath>
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

Просто проверьте объяснение acesiddhu :

Вы используете задачу установки инструментов тестирования Visual Studio в своем определение. в случае, если эта задача используется, быть установленным в false, потому что в режиме xcopy мы не GAC выше DLL 'Microsoft.VisualStudio.CodeCoverage.Shim (это зависимость, которая должен быть загружен, когда useverifiable имеет значение true)

отметка этого свойства как ложного гарантирует, что он не использует этот конкретный длл.

...