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