Проверка состояния покрытия кода Azure DevOps не должна включать сторонние библиотеки DLL

Мой конвейер yaml Azure Devops содержит следующее:

stages:
- stage: 'Build'
  displayName: 'Build, Test, Publish'
  jobs:
  - job: build
    displayName: Build
    steps:

    - task: NuGetAuthenticate@1 # needed to authenticate for private NuGet feed

    - script: |
        dotnet build --configuration Release

    - task: DotNetCoreCLI@2
      displayName: Test
      inputs:
        command: test
        projects: '**/*[Tt]ests/*.csproj'
        arguments: '--configuration release --collect "Code coverage" --no-build'

Это автоматически добавляет проверку статуса покрытия кода в мои запросы на включение.

Однако разочаровывает то, что показатель покрытия включает сторонние библиотеки DLL из NuGet, из-за чего покрытие моего кода кажется низким:

  • Как я могу заставить его сообщать только о покрытии моего кода?

1
68
1

Ответ:

Решено

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

Проверка состояния покрытия кода в запросе на включение будет полностью отражать результаты покрытия кода в соответствующем конвейере.

Как я могу заставить его сообщать только о покрытии моего кода?

Чтобы удовлетворить ваши требования, вы можете добавить файл .runsettings в свой проект и использовать его для исключения библиотек Microsoft DLL при сборе покрытия кода в тестовой задаче dotnet.

Вот пример:

<?xml version = "1.0" encoding = "utf-8" ?>
<RunSettings>
  <DataCollectionRunSettings>
     <DataCollectors>
      <DataCollector friendlyName = "Code Coverage">
        <Configuration>
          <CodeCoverage>
            <ModulePaths>
              <Exclude>
                <CompanyName>.*microsoft.*</CompanyName>
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
   </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

Когда вы используете тестовую задачу dotnet, вы можете добавить аргумент: --settings filename.runsettings

Например:

- task: DotNetCoreCLI@2
  displayName: Test
  inputs:
    command: test
    projects: '**/*[Tt]ests/*.csproj'
    arguments: '--configuration release --collect "Code coverage" --settings filename.runsettings  --no-build'

В этом случае из результата покрытия кода в Pipeline будут исключены библиотеки DLL третьих сторон, а при проверке состояния покрытия кода будет получен отчет, который не содержит библиотеки DLL третьих сторон.

Для получения более подробной информации вы можете обратиться к этому документу: Настройка анализа покрытия кода