我的解决方案设置了名为“ProjectName”的项目,其中包含“ProjectName”。包含我的单元测试的测试。我想从VS 2012(MS Test)下的代码覆盖率分析中排除测试项目,并成功设法通过将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>
但同样,我得到空结果。我的印象是,一个空的(或不存在的)Include块将默认包含所有内容,除非与Exclude块匹配,所以我不认为这是严格要求的。
谁能指出我正确的方向?我从this other question看到我并不是唯一一个试图排除测试的人,但我想在汇编级别进行,MSDN似乎建议我可以。
与时期问题有关,因为它被提及here。如果您将排除部分更改为此
<ModulePath>.*tests.dll</ModulePath>
<ModulePath>.*Tests.dll</ModulePath>
或这个
<ModulePath>.*\.tests\..*</ModulePath>
<ModulePath>.*\.Tests\..*</ModulePath>
它会工作的
您可以通过排除项目dll或使用项目名称本身来排除它。例如。 -
<ModulePaths>
<Exclude>
<ModulePath>Fabrikam.Math.UnitTest.dll</ModulePath>
<!-- You can add more ModulePath nodes here. -->
</Exclude>
</ModulePaths>
这个MSDN link对它很有用。