从Clover代码覆盖范围全局排除所有Spring JavaConfig

时间:2016-03-24 07:32:15

标签: java spring code-coverage clover

我使用Spring JavaConfig来定义我的Spring配置。由于单元测试使用的是与生产代码不同的Spring配置,因此当我在单元测试中使用Clover代码覆盖时,生产配置显示为100%未覆盖。

我可以使用@Configuration注释来标识所有这些类。或者,我可以使用@Bean注释来标识这些类中的所有方法。

是否有Clover exclude或代码上下文过滤器,我可以设置为使用这些注释全局排除代码?我使用maven-clover2-plugin来运行Clover。

1 个答案:

答案 0 :(得分:2)

目前Clover允许使用五种方法从覆盖率测量中排除代码:

  1. 排除整个文件

    • 在Ant中它是< clover-setup> /< fileset> /<排除>标签
    • 在Maven中< excludes>,< excludesFile>或< excludesList>选项
  2. 排除某些方法

    • 在Ant中它是< clover-setup> /< methodContext>标签与< clover-report>结合使用/< current> /<
    • 在Maven中无法直接使用 - 您必须使用< reportDescriptor>用于在外部XML文件中配置报告格式的选项;问题是clover-setup,你也必须自定义 - 也许通过maven-antrun-plugin调用Clover可以帮助
  3. 排除某些陈述

    • 在Ant中它是< clover-setup> /< statementContext>标签与< clover-report>结合使用/< current> /<
    • 在Maven中你必须使用< reportDescriptor>
  4. 排除某些代码块

    • 在Ant中它是< clover-report> /< current> /<具有预定义的块名称,例如'constructor'或'switch' - 有关更多详细信息,请参阅使用+ Coverage +上下文
    • 在Maven中你必须使用< reportDescriptor>
  5. 排除任意来源行

  6. 您可以在源代码中输入 // CLOVER:OFF // CLOVER:ON 内联注释

    不幸的是,目前无法排除给定的类。但是,我可以看到一些可用的解决方法:

    1. 在要排除的类周围添加// CLOVER:OFF和// CLOVER:ON注释。

    2. 排除整个文件

    3. 将这些@Configuration类视为测试代码。

    4. 这是一个黑客。 Clover允许声明哪些类是测试类。匹配基于文件名,类签名和测试签名。请参阅< clover-setup> /< testsources> /< testclass>标签。在此testclass标记中,您可以定义与整个类签名匹配的正则表达式。在你的情况下,它可能是:

      <testclass annotation=".*@Configuration.*"/>
      

      虽然这不会禁用这些类的代码检测,但它们将被视为测试代码,它们不应该对应用程序代码度量标准有所贡献。

      请注意,Clover分别计算应用程序和测试代码的代码度量标准。

      参考文献: