【问题标题】:Open cover generates no output on coverage details开盖不生成有关覆盖详细信息的输出
【发布时间】:2011-07-24 07:52:40
【问题描述】:

尝试如下运行开盖

opencover.console.exe -target:"C:\Users\rkapiset\Downloads\xunit-1.8\xunit.console.clr4.x86.exe" -targetargs:"""E:\Office\CRM\dotnet\ 1 - UI\EYC.CRM.UI.Tests\bin\Debug\EYC.CRM.UI.Tests.dll""" -filter:+[EYC]* -output:coverage.xml

下面是结果

总共 61 个,失败 3 个,跳过 0 个,耗时 1.674 秒
访问过的第 0 类(共 0 类)(NaN)
已访问的方法 0 of 0 (NaN)
已访问点 0 的 0 (NaN)
未访问的课程
未访问的方法

任何提示我哪里出错了? 提前致谢。

【问题讨论】:

  • 过滤器可能还需要是 -filter:"+[EYC]* -[EYC.CRM.UI.Tests]*" 否则您可能会覆盖您的测试类,这可能不会更可取

标签: code-coverage opencover


【解决方案1】:

有几个关键可以让它发挥作用。

  1. 找到打开的盖子
  2. 告诉它使用 xunit.console.exe
  3. 使用 targetargs 为 xunit.console.exe 提供参数
  4. 为 xunit 提供测试 dll 和应用程序 dll 的调试版本
  5. 指示 xunit 不使用影子副本(因此所有 PDB 调试文件都在其工作目录中可用)
  6. 使用反斜杠在 targetargs 中的路径中注释引号
  7. 从覆盖范围中过滤掉“.Tests”项目中的类
  8. 使用 -register 做一些神奇的事情
  9. 以管理员身份运行(如果您的计算机上关闭了 UAC,则不会出现问题)

例子:

"C:\OpenCover.4.6.166\tools\OpenCover.Console.exe" -output:"C:\MyProject\coverage.xml" "-target:C:\MyProject\packages\xunit.runner.console.2.0.0\tools\xunit.console.exe" -targetargs:"\"C:\MyProject\Project.Tests\bin\Debug\Project.Tests.dll\" \"C:\MyProject\Project\bin\Debug\Project.exe\" -noshadow" -filter:"+[*]Project.* -[*.Tests]*" -register

引用: http://derekwilson.net/derekblog/post/2012/05/29/Using-OpenCover-and-xUnit.aspx

【讨论】:

  • “-noshadow”参数对我帮助很大。谢谢!
【解决方案2】:

您是否注册了分析器?

尝试 -register 开关,或者如果在 UAC 下 -register:user

所有的开关在OpenCover Wiki上都有解释

您可以在已安装的程序文件文件夹中的 x86 和 x64 文件夹中的每个分析器 OpenCover.Profiler.dll 上使用 regsvr32

【讨论】:

  • 感谢您的及时回复。按照你说的做了所有的改变。但还没有运气..opencover.console.exe -register:"user" -target:"C:\Users\rkapiset\Downloads\xunit-1.8\xunit.console.clr4.x86.exe" -targetargs:""" E:\Office\CRM\dotnet\1 - UI\EYC.CRM.UI.Tests\bin\Debug\EYC.CRM.UI.Tests.dll""" -filter:+[EYC*]* -output:coverage .xml
  • 已经在x86安装文件夹下注册了OpenCover.Profiler.dll。仍然是相同的结果集。还有什么需要注意的地方吗?
  • 尝试 xunit 命令行上的 /noshadow 开关 - 为了正确检测覆盖工具查找 pdb 文件所需的代码 - xunit 看起来将文件复制到另一个位置,因此没有 PDB找到文件,因此没有覆盖范围。
  • @Shaun Wilde,我已经对两个分析器 DLL 运行了 regsvr32,但我仍然没有从 -output 得到任何输出。您可以解释这里发生的任何变化。干杯
  • 很难在 SO 的评论部分讨论另一个问题(即请求命令行等),也许您应该在 SO 上提出新的 Q 或在 github 上的 opencover 项目上提出问题。
【解决方案3】:

尝试在您的代码中添加 -register:user。 如果这失败了,那么您一定是缺少Microsoft Visual C++ 2010 Redistributable Package (x86).。 这是解释here

【讨论】:

  • 我相信 Ravindra(+我自己的支持性评论)涵盖了注册问题。仅供参考:OpenCover 不再静态链接到相关库,这可以通过遵循文章和 GitHub 上的支持问题来确定。
  • 我在尝试将 opencover 与 Visual Studio 2008 应用程序一起使用时需要安装它。感谢肖恩的工具!
  • 多久以前因为最新版本的 OpenCover 不再需要安装“可再发行组件”?
  • 就在两天前,我在 Windows Vista 和 Visual Studio 2008 上进行了尝试。您在安装过程中是否生成任何日志文件?然后我可以检查并通知您。
  • @RockWorld 链接在“这里有解释”上已失效
猜你喜欢
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 2013-12-13
相关资源
最近更新 更多