如何从VS2012单元测试中的代码覆盖率分析中排除名称以“.Test”结尾的项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从VS2012单元测试中的代码覆盖率分析中排除名称以“.Test”结尾的项目相关的知识,希望对你有一定的参考价值。

我的解决方案设置了名为“ProjectName”的项目,其中包含“ProjectName”。包含我的单元测试的测试。我想从VS 2012(MS Test)下的代码覆盖率分析中排除测试项目,并成功设法通过将ExcludeFromCodeCoverage属性添加到每个测试类来实现这一点,如here所述。

随着测试类数量的增加,排除整个测试程序集会很不错。我想使用MSDN链接中描述的.runsettings文件但似乎没有任何运气。

这是我的.runsettings文件:

<?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>
            <ModulePaths>
              <Exclude>
                <ModulePath>.*tests.*</ModulePath>
                <ModulePath>.*Tests.*</ModulePath>>
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

这导致为代码覆盖率生成空结果,如果我注释掉整个<Exclude>块,我会在所有解决方案的项目中获得代码覆盖,包括测试(正如预期的那样,我只是想确保添加runSettings文件不是导致问题本身)。

我试过加入:

<Include>
  <ModulePath>.*.dll$</ModulePath>
  <ModulePath>.*.exe$</ModulePath>
</Include>

但同样,我得到空结果。我的印象是,一个空的(或不存在的)Include块将默认包含所有内容,除非与Exclude块匹配,所以我不认为这是严格要求的。

谁能指出我正确的方向?我从this other question看到我并不是唯一一个试图排除测试的人,但我想在汇编级别进行,MSDN似乎建议我可以。

答案

与时期问题有关,因为它被提及here。如果您将排除部分更改为此

<ModulePath>.*tests.dll</ModulePath>
<ModulePath>.*Tests.dll</ModulePath>

或这个

<ModulePath>.*.tests..*</ModulePath>
<ModulePath>.*.Tests..*</ModulePath>

它会工作的

另一答案

您可以通过排除项目dll或使用项目名称本身来排除它。例如。 -

<ModulePaths>
 <Exclude>
  <ModulePath>Fabrikam.Math.UnitTest.dll</ModulePath>  
    <!-- You can add more ModulePath nodes here. -->
 </Exclude> 
</ModulePaths>

这个MSDN link对它很有用。

以上是关于如何从VS2012单元测试中的代码覆盖率分析中排除名称以“.Test”结尾的项目的主要内容,如果未能解决你的问题,请参考以下文章

VS2012 & TFS2012 单元测试主要问题

如何从代码覆盖率伊斯坦布尔记者中排除模拟文件

如何从 Visual Studio 2022 社区版的单元测试中获取代码覆盖率?

项目中的每个测试都说“从实时单元测试中排除”?

如何从代码覆盖率数字中排除 browserify 生成的代码?

如何从测试覆盖率中排除 Dagger2 类