问题标签 [opencover]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - OpenCover 生成一个空报告
我正在使用OpenCover来确定一个简单 C# 项目的代码覆盖率。
问题
虽然我可以看到 MSTest 正在运行单元测试(并成功),但生成的报告是空的。
细节
这是我正在使用的命令:
输出
生成报告的内容:
环境
该代码在 64 位 Windows 7 上运行,但在 32 位 Visual Studio 命令提示符环境中执行。
编辑我在带有单元测试的调试版本的目录中运行命令,并将 OpenCover 目录添加到环境路径中。
我试过的
我用 PartCover 搜索了类似的问题(因为 OpenCover 似乎是一种分支),但找不到任何与问题匹配的东西并提出了解决方案。
编辑我还使用更广泛的过滤器进行了测试,-filter:+[*]*
但这并没有以任何方式改变输出。
编辑我还使用此处提到的 MSTest/noisolation
参数进行了测试。仍然没有结果。
编辑我还通过完全删除过滤器并回退到默认过滤器进行了测试。没结果。
typemock-isolator - Opencover 可以与 TypeMock 隔离器一起使用吗?
我正在寻找一个 .NET 覆盖工具,并且一直在尝试 PartCover,但结果喜忧参半。我看到OpenCover旨在取代 PartCover,但到目前为止我还无法将它与 TypeMock Isolator 链接,因此我的模拟测试在收集覆盖信息时通过了。
我尝试复制我的 Partcover 设置,但没有定义的配置文件名称可与 Isolator 的“链接”参数一起使用。认为 OpenCover 是基于 Partcover 的,我试图告诉 Isolator 与 Partcover 链接,它没有抱怨(我仍然安装了 Partcover),但链接不起作用 - Isolator 认为它不存在。
我错过了一步吗?有解决方法吗?还是我必须等待与 OpenCover 成为朋友的 Isolator 版本?
code-coverage - Open cover generates no output on coverage details
trying to run the open cover as below
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
below is the result
61 total, 3 failed, 0 skipped, took 1.674 seconds
Visited Classes 0 of 0 (NaN)
Visited Methods 0 of 0 (NaN)
Visited Points 0 of 0 (NaN)
Unvisited Classes
Unvisited Methods
Any hints where i'm going wrong? thanks in advance.
code-coverage - 如何向 OpenCover 工具添加过滤器以跳过命名空间中的某些类
如何添加过滤器以跳过命名空间/程序集中的某些类。例如:SYM.UI
是基础组件,我想跳过SYM.UI.ViewModels
。编写以下过滤器,但它包括所有过滤器并且不满足我的要求:
请帮我纠正这个问题?
msbuild - OpenCover MSBuild 集成 - 未生成任何结果
在让 OpenCover 在我的机器上工作之后,下一步是让它与构建服务器一起工作。
我一直在尝试将 OpenCover 与 Bamboo Build Server 上的 MSBuild 集成。在构建解决方案后,我已按如下方式修改了 Build.proj 以运行 OpenCover:
“Coverage”目录是在解决方案根目录(构建期间的工作目录)中创建的。测试已运行并全部通过,但在Committing....
构建日志中显示(将在命令行中显示的内容)之后,没有生成任何结果,并且构建继续执行下一个任务(使用 ReportGenerator 创建报告 - 这失败为CodeCoverageResults.xml 未创建)。
在构建机器上的命令行中运行相同的命令时,一切都按预期工作,并且可以由 ReportGenerator 生成报告。
有没有其他人有同样的问题?我是否需要像这个PartCover 示例一样注册等效的 dll?
c# - 没有使用 Moles 的测试的代码覆盖率信息
在过去的几天里,我已经习惯了 OpenCover,并且我注意到使用 Moles 进行的测试不会生成任何 Coverage 信息。
我创建了一个小解决方案来隔离问题,并发现代码覆盖率仅针对没有该[HostType("Moles")]
属性的测试生成。
阅读周围我发现这个和这似乎是我的问题的 NCover 等价物。他们说这与 Moles 运行分析器以及覆盖工具有关,并且CLRMONITOR_EXTERNAL_PROFILERS
可以设置一个环境变量以允许多个分析器与 Moles 同时运行 - 我认为这就是解决方案在于,但我不是 100% 确定。我猜该变量的值将是 OpenCover 分析器的名称 - 有人知道这个名称吗?
有没有人设法让 OpenCover 与 Moles 一起运行?可以做到吗?
c# - 没有覆盖 x64 Windows Server 2003 上的 Moles 测试
出于某种原因,OpenCover 没有涵盖在 Windows Server 2003(64 位)上使用 moles 的测试。我提出了一个类似的问题,在我的 32 位 Windows 7 机器上解决了这个问题,但由于某种原因,在 Windows Server 机器上设置环境变量并没有什么不同。
x64 探查器是否有不同的 CLSID?或者这可能是另一个问题?
重现步骤
使用三种方法在 Visual Studio 中创建一个新项目:
接下来创建一个测试项目,如下所示:
为了编译以上代码,您需要通过右键单击 ConsoleApplication2 引用并选择“添加 Moles 程序集”来“添加 Moles 程序集”。
使用以下命令运行 OpenCover:
64位机器等效:
在 results.xml 文件上运行 ReportGenerator。
预期成绩
如果成功(如在我的 32 位 Windows 7 机器上),报告应显示 method3 已覆盖(在 method2Test 中调用),如下所示:
但是,在 64 位 Windows Server 上运行时,结果如下所示:
在这两种情况下,所有测试都通过了,但是在 64 位 Windows Server 上使用 Moles 的测试没有获取覆盖信息。
我希望这可以更清楚地解释问题 - 如果您需要更多信息,请告诉我。
谢谢,杰克
.net - 为什么 opencover 不写入指定的输出文件?
我正在从管理控制台使用以下命令行(为清楚起见包装)运行 OpenCover。
packages\OpenCover.1.0.625\OpenCover.Console.exe -register:user -target:packages\NUnit.2.5.10.11092\tools\nunit-console.exe -targetargs:"FooProject.nunit" -filter:+[ ] -输出:coverage.xml
我得到下面的输出,但未创建指定的coverage.xml 文件。
为什么没有创建输出文件?
更新我已按照此问题的答案中的
建议注册了 32 位和 64 位分析器并删除了标志,但我仍然得到相同的输出-register
NUnit 版本 2.5.10.11092
版权所有 (C) 2002-2009 Charlie Poole。
版权所有 (C) 2002-2004 James W. Newkirk、Michael C. Two、Alexei A. Vorontsov。
版权所有 (C) 2000-2002 菲利普·克雷格。
版权所有。运行时环境 -
操作系统版本:Microsoft Windows NT 6.1.7601 Service Pack 1
CLR 版本:2.0.50727.5446 (Net 2.0)ProcessModel:默认 DomainUsage:默认
执行运行时:默认
..................F....FF............F... .........F..F..F......
测试运行:58,错误:0,失败:7,不确定:0,时间:1.5298027 秒
未运行:0,无效: 0,忽略:0,跳过:0错误和失败:
1) 测试失败:
FooProject.Tests.Controllers.BarControllerTests.Index() 中 C:\FooProject\FooProject.Tests\Controllers\BarControllerTests.cs:line 27 中的 FooProject.Tests.Controllers.BarControllerTests.Index2) 测试失败:FooProject.Tests.Controllers.FringControllerTests.Index
() 中 C:\FooProject\FooProject.Tests\Controllers\FringControllerTests.cs:line 107 中的 FooProject.Tests.Controllers.FringControllerTests.Index3) 测试失败:FooProject.Tests.Controllers.FringControllerTests.Save
在 C:\FooProject\FooProject.Tests\Controllers\FringControllerTests.cs:line 135 中的 FooProject.Tests.Controllers.FringControllerTests.Save()4)测试失败:FooProject.Tests.Repositories.FringRepositoryTests.Foo
() 中的 FooProject.Tests.Repositories.FringRepositoryTests.Foo 在 C:\FooProject\FooProject.Tests\Repositories\FringRepositoryTests.cs:line 175) 测试失败:FooProject.Tests.Services.BarServiceTests.Frob
() 在 C:\FooProject\FooProject.Tests\Services\BarServiceTests.cs:line 52 中的 FooProject.Tests.Services.BarServiceTests.Frob6) 测试失败:FooProject.Tests.Services.FringServiceTests.Frob
() 中的 FooProject.Tests.Services.FringServiceTests.Frob 在 C:\FooProject\FooProject.Tests\Services\FringServiceTests.cs:line 397) 测试失败:FooProject.Tests.Services.FringServiceTests.Frob() 在 C:\FooProject\FooProject.Tests\Services\FringServiceTests.cs:line 139 中的 FooProject.Tests.Services.FringServiceTests.Frob
承诺……
c# - 为什么具有 SecurityTransparent 属性的程序集会通过探查器导致检测代码抛出 VerificationException?
似乎当我使用OpenCover 检测程序集时,具有SecurityTransparent属性的程序集(以及似乎是 AllowPartiallyTrustedCallers)将引发 VerificationException。我想知道为什么会这样,以及是否有另一种解决方案来重新编译不包含这些属性的程序集,即条件编译,如下载的 MVC3 代码中所示(但奇怪的是,当我浏览codeplex 上的存储库)。请注意,如果没有这些程序集属性,则覆盖范围运行没有问题。
OpenCover 使用CALLI 指令将检测数据(序列点标识符)发送到分析器。似乎调用该指令的行为会导致异常发生;检测部分似乎很好,JIT 编译新的检测方法没有问题。插桩的行为不会引起问题,因为如果我删除所有插桩,而不是让 Tiny 方法变胖和小分支长,代码执行没有问题。
目前我正在使用 Mono.Cecil 检查通过“包含在覆盖范围内”过滤器的程序集并向用户报告问题,同时跳过检测然后继续,但我想知道是否有任何我可以在分析期间执行以避免此问题并避免重新编译。
所以总结两个问题“为什么会发生?” 和“我可以在不重新编译的情况下避免它吗?”
注意:PartCover 似乎也出现了这个问题,它使用不同的方法来记录访问点。
注意:我是 OpenCover(一个开源代码覆盖工具)的开发者,目前是 PartCover 的维护者。
c++ - 线程安全队列是一个好方法吗?
我正在寻找一种方法来优化以下代码,用于我开发的开源项目,或者通过将繁重的工作转移到另一个线程来提高其性能。
当调用每个访问点时,上述代码由OpenCover分析器(用 C++ 编写的 .NET 开源代码覆盖工具)使用。互斥体用于保护一些共享内存(在多个 32/64 位和 C++/C# 进程之间共享的 64K 块),当它向主机进程发出信号时,它会发出信号。显然,这对于每个仪表点来说都非常重,我想让影响更轻。
我正在考虑使用由上述方法推送到的队列和一个线程来弹出数据并填充共享内存。
问:我可以使用 C++ (Windows STL) 中的线程安全队列 - 还是我不想用另一个问题替换一个问题的无锁队列?人们认为我的方法合理吗?
编辑1:我刚刚在包含文件夹中找到concurrent_queue.h - 这可能是我的答案......?