当我 运行 覆盖率测试时,我得到了测试方法代码的覆盖率,没有我想要测试的方法的覆盖率

When I run the coverage tests, I get the coverage of the code of the tests methods, no the coverage of the methods that I want to test

我有一个项目 类 和我想要测试的方法。我有另一个带有测试方法的项目,它将测试我的主项目的方法。

我 运行 使用 opencover 进行测试并使用 reportgenerator 生成报告,使用我在 .bet 文件中的命令:

..\tools\OpenCover.Console.exe -register:user -target:"C:\myDllWithTests.dll" -output:"c:\coverage\opencovertests.xml"

.\ReportGenerator.exe "-reports:c:\coverage\opencovertests.xml" "-targetdir:c:\coverage\opencovertests.xml\reports"

我正在使用 MSTest 进行测试。

问题是在 html 报告中,我看到覆盖的代码是测试方法,而不是我的测试主项目中的方法。

如何在结果中添加主要方法?

谢谢。

在 OpenCover 的 target 参数中将路径传递给 MSTest(例如 "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe")并在 targetargs 参数中指定您的测试程序集(例如 "C:\myDllWithTests.dll")。

要从代码覆盖统计中删除测试程序集,请在 filter argument 中指定它们。

下面是适合我的 OpenCover 命令。这里被测代码放在SampleApp.dll,测试代码放在SampleApp.Tests.dll.

.\OpenCover.Console.exe -register:user -mergebyhash -target:"c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe" -targetargs:"/testcontainer:\"d:\test\SampleApp\SampleApp.Tests\bin\Debug\SampleApp.Tests.dll\"" -output:UTResults.xml -filter:"+[SampleApp*]* -[SampleApp.Tests]*"

结果报告仅包含 SampleApp.dll 程序集的统计信息,SampleApp.Tests.dll 被排除在外:

查看此 answer 了解更多详细信息。 Allen Conway 也有一篇关于将 OpenCover 和 ReportGenerator 用于 .Net 项目的文章。great article

这可能是一个迟到的答案,但我花了一两个小时玩这个,发现以下内容可以解决这个问题。值得注意的是,我有另一个我知道有效的项目的原始 bat 脚本,只是更改了 DLL 文件名,所以我知道脚本没问题。

要进行的额外检查是:-

  1. 右键单击包含您希望在覆盖率报告中可见的源代码的项目(不是单元测试项目),然后单击 Properties
  2. Select 构建 > 输出 > 高级
  3. 调试信息设置为完整
  4. 重建解决方案并重新运行 bat 文件。

我在 Visual Studio 2019 年使用 .NET Framework 4.7.2 项目工作。