PostSharp 和 Visual Studio 代码覆盖率

发布于 2024-10-18 12:15:54 字数 203 浏览 3 评论 0原文

我最近开始在我的一些项目中使用 PostSharp,并注意到一个不幸的副作用 - 使用它的所有项目中的代码覆盖率显着下降。

我猜测发生这种情况的原因是分析器看到 PostSharp 代码,但其中很多代码没有经过测试(即用于通用异常处理和日志记录的样板代码)。显然,我可以为使用方面的每种方法编写单元测试,但老实说,这感觉像是浪费时间。

有人对这种事情有经验吗?

I've recently started using PostSharp in some of my projects and have noticed an unfortunate side effect - the code coverage in all the projects its used with drops significantly.

I'm guessing the reason this happens is that the analyzer sees the PostSharp code and a lot of it isn't tested (i.e. boiler plate code for generic exception handling and logging). I could obviously write unit tests for every method that use the aspects, but if I'm honest it feels like a waste of time.

Has anybody got any experience with this kind of thing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

别理我 2024-10-25 12:15:54

您使用什么代码覆盖率工具?在 PartCover 中,您可以忽略某些类或命名空间(例如 MyProgram.PostSharp.*)以接收正确的数字。

What code coverage tool do you use? In PartCover, you can ignore some classes or namespaces, like MyProgram.PostSharp.*, to receive correct numbers.

北方的巷 2024-10-25 12:15:54

我熟悉 AOP,但不太熟悉 PostSharp。

但是...

如果排除属性不能解决问题,我看到的唯一替代方案是构建一个不注入代码的程序集版本。如何获得它取决于 PostSharp 的工作原理。如果在常规编译之后完成,您可以创建一个额外的构建目标来构建不使用 PostSharp 的程序集。然后您可以在单元测试中使用它。您应该注意,您的单元测试无法再测试 PostSharp 添加的功能。

I am familiar with AOP but not specifically with PostSharp.

But...

If exclusion attributes do not solve the problem, the only alternative I see is building a version of the assembly without the code injected. How you are to obtain this depends on how PostSharp works. If it is done after the regular compile, you could make an extra build target that builds your assembly without PostSharp. Then you can use that in your unit tests. You should note that your unit test can no longer test the functionality added by PostSharp.

彼岸花似海 2024-10-25 12:15:54

我找到了这个问题的解决方案:

如果我不在调试模式下添加方面属性,则代码覆盖率计算正确(如果我在调试模式下运行测试):

#If Not DEBUG Then
<Assembly: De.Trumpkin.LogWrapper.TraceLogAspect()>
#End If

I found a solution for this problem:

If I don't add the aspect attribute in the debug mode, the code coverage is calculated right (if I run the tests in debug mode):

#If Not DEBUG Then
<Assembly: De.Trumpkin.LogWrapper.TraceLogAspect()>
#End If
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文