我正在尝试为 Sentry .NET SDK 实现代码覆盖率。
可能的解决方案似乎是:
我尝试了 microsoft.codecoverage 和 altcover,但这两个工具都会改变单元测试的结果。具体来说,使用这些代码覆盖工具中的任何一个进行检测都会改变 Sentry 收集的调试堆栈跟踪(这会导致我们的验证测试失败)。当使用 microsoft.codecoverage 或 altcover 运行测试时 DebugImages 中的 CodeId 不同。
Coverlet 是唯一不受这种观察者效应影响的。然而,我们发现使用 Coverlet 时我们的 CI 构建会定期失败(例如此处),在计算覆盖率结果时会出现类似
Unable to read beyond the end of the stream.
的错误。
.NET 是否还有其他代码覆盖率选项,或者是否有人能够使用现有的覆盖率工具成功克服上述问题?
我没有找到观察者对 microsoft/altcover 库的影响的解决方案,但使用
coverlet.collector
而不是 coverlet.msbuild
似乎可以解决 Coverlet 的困难(根据有关此 已知问题的文档)并且这也不会引入任何其自身的观察者效应......所以似乎是最好的解决方案。