OpenCover结果与TFS编号不匹配

时间:2013-09-05 03:37:28

标签: unit-testing visual-studio-2012 tfs mstest opencover

我们有VS 2008项目(asp.net)。它属于TFS。我们使用模拟框架(nunit?)编写了单元测试。开发人员可以在他们的机器上执行测试并查看代码覆盖率。

现在,我们已将我们的解决方案升级到VS 2012专业版。作为专业版,它不支持执行代码覆盖,因此我尝试了尝试OpenCover。

问题在于通过TFS进行构建时,代码分析显示24%作为代码覆盖率,但是当我在开发者机器上本地执行OpenCover时,它显示完全不同的数字。我们需要针对TFS报告的内容,因为它由组织自动ALM合规性引擎监控,并且开发人员需要知道TFS代码覆盖率%不低于X.

我的OpenCover synatx是:

OpenCover.Console.exe -register:user -target:"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\MSTest.exe" -targetargs:"/noisolation /testcontainer:"C:\code\APRRel\UnitTest\bin\Debug\unittest.dll" /resultsfile:C:\Reports\MSTest\APRRel.trx" -filter:"+[*]*" -mergebyhash -output:C:\Reports\MSTest\projectCoverageReport.xml

以下是我在TFS和OpenCover中的输出:

TFS result

OpenCover result

如何使用opencover报告类似于TFS的统计数据?

1 个答案:

答案 0 :(得分:0)

正如他们所说,你正在尝试将苹果与梨进行比较。这两个工具是不同的,他们有不同的方法来检测代码。 ReportGenerator中显示的数字也基于所覆盖的行数。 OpenCover根据序列点的数量有不同的数字(这不是1:1的关系,更多的是n:m的线。)

如果您打开实际的开放输出,您将看到顶部附近的摘要行,如下所示

<Summary numSequencePoints="895" visitedSequencePoints="895" numBranchPoints="537" visitedBranchPoints="455" sequenceCoverage="100" branchCoverage="84.73" maxCyclomaticComplexity="8" minCyclomaticComplexity="0" />

序列覆盖率是您要查看的序列覆盖率,因为此度量标准可能是VS覆盖率所指的基于块的,但是由于不同的仪器实践(苹果与梨),这两种工具可能会有所不同。

接下来,您需要考虑过滤器,+[*]*将包含具有PDB文件的所有程序集。尝试使用以下过滤器+[*]* -[*.Tests]*排除测试程序集 - 假设您的测试程序集以.Tests结尾。

然而,IMO,如果你希望你的开发人员知道构建系统的覆盖范围与桌面相同,那么他们真的应该在两个位置和相同的配置中运行相同的工具;由于编译器创建了不同的IL, debug release 覆盖范围会有所不同,这会影响检测并因此影响数字,但它们通常在0-2%之内,具体取决于您的代码库。