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

Globally exclude all Spring JavaConfig from Clover code coverage

我使用 Spring JavaConfig 来定义我的 Spring 配置。由于单元测试使用与生产代码不同的 Spring 配置,当我将 Clover 代码覆盖与单元测试一起使用时,生产配置显示为 100% 未发现。

我可以使用 @Configuration 注释来识别所有这些 类。或者,我可以使用 @Bean 注释来标识这些 类.

中的所有方法

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

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

  1. 排除整个文件

    • 在 Ant 中它是 / / 标签
    • 在 Maven 中它是 选项
  2. 不包括某些方法

    • 在 Ant 中它是 / 标签与 / / <
    • 在 Maven 中不能直接使用 - 您必须使用 选项在外部 XML 文件中配置报告格式;问题出在 clover-setup 上,您还必须对其进行自定义 - 也许通过 maven-antrun-plugin 调用 Clover 可能会有所帮助
  3. 不包括某些陈述

    • 在 Ant 中它是 / 标签结合 / / <
    • 在 Maven 中,您必须使用
  4. 不包括某些代码块

    • 在 Ant 中它是 / / < 具有预定义的块名称,例如'constructor' 或 'switch' - 有关更多详细信息,请参阅 Using+Coverage+Contexts
    • 在 Maven 中,您必须使用
  5. 排除任意源行

你可以在源代码中加入//CLOVER:OFF//CLOVER:ON行内注释

遗憾的是,目前无法排除给定的 class。但是,我发现几乎没有可用的解决方法:

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

  2. 排除整个文件

  3. 将这些@Configuration class作为测试代码。

这是一个技巧。 Clover 允许声明哪些 classes 是测试 classes。匹配基于文件名、class 签名和测试签名。请参阅 / / 标记。在这个 testclass 标签中,您可以定义匹配整个 class 签名的正则表达式。在您的情况下,它可能是:

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

虽然这不会禁用这些 classes 的代码检测,但它们将被视为测试代码,并且不应影响应用程序代码指标。

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

参考文献: