首页 > 解决方案 > VSTS / VSTest 不遵守 [ExcludeFromCodeCoverage]

问题描述

我最近刚刚开始使用 VSTS 的持续集成,并且我已经建立了一个包含“Visual Studio 测试”任务的管道。

在任务中,有一个选项可以在测试中执行代码覆盖率扫描。

为了确保我的代码覆盖范围仅涵盖我的代码并且 a) 创建了一个.RunSettings文件以仅包含我生成的程序集 b) 代码的某些部分具有该[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>

标签: unit-testingcontinuous-integrationazure-devops

解决方案


这里有个问题:RunSettings file not used in TFS VsTest task,你可以去看看关于这个问题的讨论。

作为一种解决方法,您可以使用以下 .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 测试工具安装程序任务。如果使用该任务,则需要将 useverifiable 属性设置为 false,因为在 xcopy 模式下,我们不会 GAC 上面的 dll 'Microsoft.VisualStudio.CodeCoverage.Shim(这是一个依赖项,当 useverifiable 设置为 true 时需要加载)

将此属性标记为 false 可确保它不使用此特定 dll。


推荐阅读