我的解决方案是使用名为" 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似乎建议我可以。
答案 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对此非常有用。