【问题标题】: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当我运行覆盖率测试时,我得到了测试方法的代码覆盖率,而不是我想要测试的方法的覆盖率
【发布时间】:2020-11-19 23:59:32
【问题描述】:

我有一个项目,其中包含要测试的类和方法。我有另一个项目,其中包含将测试我的主项目的方法的测试方法。

我使用 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 报告中,我看到覆盖的代码是测试方法,而不是我的测试主项目中的方法。

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

谢谢。

【问题讨论】:

    标签: c# code-coverage mstest opencover


    【解决方案1】:

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

    要从代码覆盖率统计中删除测试程序集,请在 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 了解更多详情。 还有一个 great article 由 Allen Conway 撰写,介绍如何将 OpenCover 和 ReportGenerator 用于 .Net 项目。

    【讨论】:

    • 我尝试添加targetargs,但结果是一样的。关于这篇文章,我知道,但他没有提供源代码,我怀疑测试是在与主代码相同的 dll 中还是另一个不同的 dll。因为在我的情况下,问题是我只得到了测试程序集的覆盖率,而不是主程序集的覆盖率。
    • 我已经尝试过使用这个过滤器:-filter:"+[*]* -[*Tests]*" -mergebyhash 但它不包括位于同一文件夹中的 main.dll测试.dll。我也尝试了主 dll 的完整名称,但它仍然不起作用。
    • 可能问题不在于 OpenCover,而在于测试本身。 MSTest 的输出是什么?您是否看到已执行测试的统计信息,例如“1/1 测试通过”?
    • 是的,我可以看到正在运行的测试的名称以及通过的数量和未通过的数量。
    • 我在想,opencover 是否兼容.net 标准?
    【解决方案2】:

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

    要进行的额外检查是:-

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多