VSTS / VSTest不遵守[ExcludeFromCodeCoverage]

时间:2018-09-04 07:15:40

标签: unit-testing continuous-integration azure-devops

我最近才开始将持续集成与VSTS结合使用,并且已经建立了包括“ Visual Studio测试”任务的管道。

在任务中,可以选择执行代码覆盖率扫描作为测试的一部分。

为确保我的代码覆盖范围仅涵盖我的代码,并已完成以下任务:a)创建一个.RunSettings文件以仅包含我生成的程序集,并且b)该代码的某些部分带有[ExcludeFromCodeCoverage]属性

现在,当从Visual Studio(2017 Enterprise,15.7.4)执行Analyze Code Coverage时,一切都会按我期望的那样工作,只有我的程序集被分析,而我排除的代码被errr排除了。

但是,在运行VSTS管道时,没有应用任何限制,并且测试了所有程序集并测试了所有代码,包括专门排除的代码,这随后导致代码覆盖率%age急剧下降。

不确定从何处去,因此希望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 :(得分:1)

这里有一个问题: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测试工具安装程序任务   定义。如果使用任务,则可验证属性需要   设置为false是因为在xcopy模式下,我们不对上述dll进行GAC   'Microsoft.VisualStudio.CodeCoverage.Shim(这是一个依赖项,   将useverifiable设置为true时需要加载)

     

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