代码之家  ›  专栏  ›  技术社区  ›  tvanfosson

使用属性在Visual Studio中忽略覆盖率分析中的代码

  •  17
  • tvanfosson  · 技术社区  · 16 年前

    我有一些类,由于某种原因,不能或者不需要单元测试。我想将这些类从我的覆盖率度量中排除,以便更好地了解我真正关心的类的覆盖率。现在我必须排除事实之后的结果。我想做的是使用一个属性将这些类标记为排除类,这样它们就不会首先包含在其中。 有没有办法用一个属性来修饰一个类,该属性将自动从覆盖率分析中排除它? vs覆盖率分析或ncover都可以。

    fwiw,这些类我可以通过检查代码是否正确来保证自己。它们主要是围绕我介绍的现有框架类的包装类,以便能够模拟出框架类。因为包装纸是被模仿出来的,所以它们不会被测试。这没关系,因为它们所做的只是包装我关心的框架类的方法。

    3 回复  |  直到 11 年前
        1
  •  26
  •   Jeroen    11 年前

    从VS2010开始 ExcludeFromCodeCoverageAttribute . 评论人士指出,这是在ncover和dotcover+nunit工作。示例用法:

    [ExcludeFromCodeCoverage]
    public class myUntestableClass
    { }
    

    也看到这个 link .他们建议使用vsinstr作为命令行工具,它有/exclude选项(它不那么方便)。

        2
  •  6
  •   tvanfosson    16 年前

    我找到了 some information 关于几个诊断属性 DebuggerNonUserCodeAttribute DebuggerHiddenAttribute 这表明使用这些属性将导致VS中的覆盖率分析器将这些从其结果中删除。我用debuggernOnUsercode属性尝试过,它似乎可以工作。虽然我不喜欢不能进入这些课程的副作用,但对于我所想的大多数课程,我可能都能接受。对于包装类来说,这不应该是一个问题,但是对于那些本身很难测试并且我需要调试器访问的类来说,最终可能会是这样。

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

        3
  •  5
  •   dcramos    16 年前

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

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

    public class CoverageExcludeAttribute : Attribute { }
    

    我们使用南特,所以我们有一个目标,看起来像这样:

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

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

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

    我们使用这两种技术。

    推荐文章