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

问题描述 投票:26回答:2

我的解决方案设置了名为“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似乎建议我可以。

visual-studio unit-testing visual-studio-2012 tdd
2个回答
42
投票

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

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

或这个

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

它会工作的


0
投票

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

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

这个MSDN link对它很有用。

© www.soinside.com 2019 - 2024. All rights reserved.