首页 > 解决方案 > 括号不包含在 VSO 中单元测试 c# 的代码覆盖范围内

问题描述

VSO 构建管道和 Visual Studio 本地之间存在一些代码覆盖率不一致。我们发现 Visual Studio 中的代码覆盖率更高,因为它将括号计为代码覆盖率的一部分。但由于某种原因,它不计入 VSO 构建管道。有谁知道为什么?这是 VSO 中的已知错误吗?

我们使用 Xunit 和 c# 进行测试,并使用 test.runsettings 排除代码。下面是 test.runsettings 文件

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Configurations that affect the Test Framework -->
  <RunConfiguration>
    <!-- Path relative to directory that contains .runsettings file-->
    <ResultsDirectory>.\TestResults</ResultsDirectory>
    <TargetPlatform>x64</TargetPlatform>
    <MaxCpuCount>10000</MaxCpuCount>
  </RunConfiguration>

  <!-- 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>
     <Attributes>
              <Exclude>
                <Attribute>^System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute$</Attribute>
              </Exclude>
            </Attributes>
            <ModulePaths>
             <Exclude>
                <ModulePath>.*unittests.dll$</ModulePath>
                <ModulePath>.*integrationtests.dll$</ModulePath>
                <ModulePath>.*xunit.*.dll</ModulePath>
                <ModulePath>.*fluentassertions.*$</ModulePath>
                <ModulePath>.*moq.*$</ModulePath>
                <ModulePath>.*telemetry.extensions.ai.netcore.*$</ModulePath>
                <ModulePath>.*newtonsoft.*$</ModulePath>
                <ModulePath>.*codeanalysis.*$</ModulePath>
              </Exclude>
            </ModulePaths>

            <!-- We recommend you do not change the following values: -->
            <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
            <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
            <CollectFromChildProcesses>True</CollectFromChildProcesses>
            <CollectAspDotNet>False</CollectAspDotNet>

          </CodeCoverage>
        </Configuration>
      </DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>

标签: visual-studiounit-testingazure-devopsazure-pipelinesxunit

解决方案


它显示不一致的代码覆盖率的原因是因为在 Visual Studio 中,我运行的是调试模式而不是发布模式。将其更改为Release模式后,编号与VSO编号一致。


推荐阅读