Visual studio 在VisualStudio中使用属性从覆盖率分析中省略代码

Visual studio 在VisualStudio中使用属性从覆盖率分析中省略代码,visual-studio,attributes,code-coverage,ncover,Visual Studio,Attributes,Code Coverage,Ncover,我有一些类,出于这样或那样的原因,不能或不需要进行单元测试。我想从我的覆盖率指标中排除这些类,这样我就可以更好地感受到我真正关心的类的覆盖率。现在我必须排除事后的结果。我想做的是使用一个属性将这些类标记为已排除,以便它们一开始就不包括在内有没有办法用一个属性来修饰一个类,该属性会自动将其从覆盖率分析中排除?VS覆盖率分析或nCover都可以 FWIW,我可以通过检查代码是否正确来保证这些类。大多数情况下,它们都是围绕现有框架类的包装类,我引入这些类是为了能够模仿框架类。因为包装器被模拟出来了,所

我有一些类,出于这样或那样的原因,不能或不需要进行单元测试。我想从我的覆盖率指标中排除这些类,这样我就可以更好地感受到我真正关心的类的覆盖率。现在我必须排除事后的结果。我想做的是使用一个属性将这些类标记为已排除,以便它们一开始就不包括在内有没有办法用一个属性来修饰一个类,该属性会自动将其从覆盖率分析中排除?VS覆盖率分析或nCover都可以

FWIW,我可以通过检查代码是否正确来保证这些类。大多数情况下,它们都是围绕现有框架类的包装类,我引入这些类是为了能够模仿框架类。因为包装器被模拟出来了,所以没有经过测试。这没关系,因为它们所做的只是包装我关心的框架类的方法。

我在几个诊断属性上找到了它们,这表明使用这些属性将导致VS中的覆盖率分析器在其结果中忽略这些。我用DebuggerNonUserCodeAttribute试过了,它似乎很有效。在我想到的大多数课程中,我可能都能接受这一点,尽管我不喜欢不能进入这些课程的副作用。对于包装类来说,这应该不是问题,但对于本质上很难测试的类来说,结果可能是这样,我需要调试器访问它们


不过,我仍在寻找替代方案。

使用NCover,您可以创建一个属性,然后告诉NCover忽略该属性

在我们的项目中,我们定义了此属性(没有名称空间,因此易于使用):

我们使用NAnt,因此我们有一个如下所示的目标:

<target name="unittests" description="run nunit tests" >        
    <ncover
        ....
        excludeAttributes="CoverageExcludeAttribute"
    />
</target>

中的问题9描述了此方法。我们的解决方案基于此

或者,您可以使用NCoverExplorer的排除功能从最终报告中排除名称空间和程序集。这只是从报告中删除数据,但最终结果是相同的


我们使用这两种技术

我们从VS2010开始。评论人士指出,这在NCover和DotCover+NUnit中都适用。用法示例:

[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }

也看到这个。他们建议使用VSInstr作为命令行工具,它有/排除选项(没有那么方便)。

谢谢。这正是我想要的。我主要将nCover与TestDriven.Net结合使用,这看起来像是启用了开箱即用的CoverageExcludeAttribute。最新版本使用ExcludeFromCodeOverage属性,因此我已切换使用该属性。问题是您无法在invidual方法上获取覆盖率数据,所以,您想删除您不关心的方法的覆盖率数据,以便总体上获得更合适的度量?是的。有一些方法不需要或者不容易测试——例如,创建包装类是为了围绕框架类进行单元测试。我不希望这些数据弄乱我所关心的课程的统计数据。这正是我想要的。感谢您的关注!是的,它也适用于dotcover和vs代码分析。
[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }