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

Dut*_*tts 28 tdd unit-testing visual-studio visual-studio-2012

我的解决方案是使用名为"ProjectName"的项目和"ProjectName"设置的.包含我的单元测试的测试.我想从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>
Run Code Online (Sandbox Code Playgroud)

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

我试过加入:

<Include>
  <ModulePath>.*\.dll$</ModulePath>
  <ModulePath>.*\.exe$</ModulePath>
</Include>
Run Code Online (Sandbox Code Playgroud)

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

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

Gri*_*rin 43

此处提到的期间问题有关.如果您将排除部分更改为此

<ModulePath>.*tests.dll</ModulePath>
<ModulePath>.*Tests.dll</ModulePath>
Run Code Online (Sandbox Code Playgroud)

或这个

<ModulePath>.*\.tests\..*</ModulePath>
<ModulePath>.*\.Tests\..*</ModulePath>
Run Code Online (Sandbox Code Playgroud)

它会工作的