java - 从 Clover 代码覆盖率中全局排除所有 Spring JavaConfig

标签 java spring code-coverage clover

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

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

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

最佳答案

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

  1. 排除整个文件

    • 在 Ant 中是 // 标签
    • 在 Maven 中是 选项
  2. 排除某些方法

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

    • 在 Ant 中,它是 / 标记与 //<
    • 的组合
    • 在 Maven 中,您必须使用
  4. 排除某些代码块

    • 在 Ant 中它是 //< 带有预定义的 block 名称,例如“构造函数”或“开关” - 请参阅使用+覆盖+上下文了解更多详细信息
    • 在 Maven 中,您必须使用
  5. 排除任意源代码行

您可以在源代码中添加 //CLOVER:OFF//CLOVER:ON 内联注释

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

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

  2. 排除整个文件

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

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

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

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

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

引用文献:

关于java - 从 Clover 代码覆盖率中全局排除所有 Spring JavaConfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36195140/

相关文章:

java - 在 Java 中,我想将 short[] 转换为 double[]

java - spring-boot:仅构建部分测试上下文

azure-devops - 提供 .runsettings 文件时,VSTS 中没有代码覆盖率

java - Spring MVC - 如何将查找路径映射到生成值

go test 错过了执行路径上的覆盖

java - 我如何从 Emma 中删除/过滤/忽略某些包(代码覆盖率)

java - 具有基于注释的复合主键的 Hibernate createCriteria 查询

java - 如果网页很大,JSOUP 不会下载完整的 html。任何替代方案或任何解决方法?

java - 无法使用 JDBC 驱动程序连接到本地主机上的 MySQL

java - 无法将我的Spring Boot API连接到MYSQL数据库