32

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

随着测试类数量的增长,最好排除整个测试程序集。我想使用该 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>

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

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

4

2 回答 2

51

正如这里提到的,与期间问题有关。如果您将排除部分更改为此

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

或这个

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

它会工作的

于 2013-09-09T06:32:42.290 回答
-1

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

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

这个MSDN 链接对它很有用。

于 2018-05-17T14:58:34.887 回答