0

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

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

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

我的 OpenCover 语法是:

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 结果

打开封面结果

我怎样才能让 opencover 报告与 TFS 相似的统计数据?

4

1 回答 1

0

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

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

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

序列覆盖率是您要查看的指标,因为该指标可能是 VS 覆盖率所指的基于块的,但由于不同的检测实践(苹果与梨),这两种工具也可能有所不同。

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

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

于 2013-09-08T23:02:00.823 回答