如何忽略代码覆盖率数据中的生成代码

20
我正在使用Visual Studio 2010,并希望将生成的服务引用代码从我的代码覆盖率统计中排除。
我找到了一个2010年之前的文章,提到了使用DebuggerNonUserCode和DebuggerHidden属性。我尝试了这个方法,它的效果如预期一样。DebuggerNonUserCode属性设置在类级别上,但是由于每个生成的服务引用代码文件中有50多个类,这并不是一个理想的选择。
有没有其他的解决方案?
4个回答

17

生成的类是部分类(partial class)。如果您在项目中创建了一个与相同命名空间和类声明的新类,您可以为该部分类添加[ExcludeFromCodeCoverage]属性。这样,每当您刷新引用时,就不必返回并编辑Reference.cs文件。


5
在“Reference.cs”中,您可以找到现有的属性,例如“[System.Diagnostics.DebuggerStepThroughAttribute()]”,并使用“[System.Diagnostics.DebuggerStepThroughAttribute()] [System.Diagnostics.DebuggerNonUserCode()]”进行搜索和替换。
主要缺点是每次更新引用时都必须重新执行此操作。
我不明白为什么微软不能使代码覆盖工具足够智能化,以跳过服务引用生成的代码。

3

System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage 可以用在类的顶部。这是一个不太好的选择,因为每次重新生成代码时都需要重新做一遍。也许微软可以在创建服务引用、实体框架类型等时自动为我们完成此操作...


2

您可以创建一个代码生成器,它会发出带有 DebuggerNonUserCode 属性的部分类。


不幸的是,创建代码生成器、测试等的成本超过了手动将其添加到现有生成的代码的成本。感谢您提出这个想法。 - btlog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接