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

时间:2013-08-29 10:31:49

标签: visual-studio unit-testing visual-studio-2012 tdd

我的解决方案是使用名为" ProjectName"的项目设置的。使用" ProjectName"。包含我的单元测试的测试。我想从VS 2012(MS测试版)下的代码覆盖率分析中排除测试项目,并成功设法通过向{1}}所述的每个测试类添加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>

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

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

2 个答案:

答案 0 :(得分:42)

与提及here的期间问题有关联。 如果您将排除部分更改为此

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

或者

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

它会起作用

答案 1 :(得分:0)

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

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

MSDN link对此非常有用。