21

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

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

4

3 回答 3

31

从 VS2010 开始,我们有ExcludeFromCodeCoverageAttribute. 评论者注意到这可以在 NCover 以及 DotCover + NUnit 中使用。示例用法:

[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }

另请参阅此链接。他们建议使用 VSInstr 作为命令行工具,它有 /EXCLUDE 选项(它不是那么方便)。

于 2010-04-07T21:15:56.817 回答
7

我发现了一些关于诊断属性DebuggerNonUserCodeAttributeDebuggerHiddenAttribute的信息,表明使用这些属性将导致 VS 中的覆盖率分析器将这些属性排除在结果之外。我已经使用 DebuggerNonUserCodeAttribute 进行了尝试,它似乎可以工作。对于我正在考虑的大多数课程,我可能可以忍受这一点,尽管我不喜欢无法进入这些课程的副作用。对于包装类来说,这应该不是问题,但是对于本质上难以测试并且我需要调试器访问的类,它可能最终会如此。

不过,我仍在寻找替代品。

于 2009-08-17T18:13:56.133 回答
5

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

在我们的项目中,我们定义了这个属性(没有命名空间,所以很容易使用):

public class CoverageExcludeAttribute : Attribute { }

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

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

NCover FAQ中的问题 9 描述了这种方法。我们的解决方案以此为基础。

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

我们使用这两种技术。

于 2009-08-19T23:25:28.873 回答