【问题标题】:How to ignore @SneakyThrows of Lombok in Jacoco code coverage?如何在 Jacoco 代码覆盖率中忽略 Lombok 的@SneakyThrows?
【发布时间】:2021-07-29 08:13:02
【问题描述】:

我使用 JaCOCO 来查看代码覆盖率(并为此使用 Intellij 插件)。我的代码上有@SneakyThrows of lombok。由于@SneakyThrows 只会将已检查的异常转换为未检查的异常,因此我希望它不会影响代码覆盖率。

但是,它似乎降低了代码覆盖率:

我尝试将lombok.addLombokGeneratedAnnotation = true 添加到我的lombok.config,但没有用。

感谢您的任何建议!

【问题讨论】:

  • 问题是 - 在 jacoco 报告中看到使用 lombok 注释时未涵盖 确切 的内容相当复杂。我通常做的是“de-lombok”一切,运行测试并找出实际未覆盖的路径。然后“lombok”返回代码。有 intellij 插件。
  • @Eugene 我知道偷偷摸摸的 throws 生成的代码是 not 运行的。代码只是... } catch(...) { throw ...}。当然它没有运行,因为我不会导致里面的代码抛出。但我想忽略这个未被覆盖的catch
  • 你不能。 jacoco 查看.class 文件,该文件是在 lombok 处理器之后生成的。想一想:你确实有一条未被覆盖的路径。
  • @Eugene 嗯...谢谢!

标签: java spring code-coverage lombok jacoco


【解决方案1】:

我对此的解决方案是尝试模拟objectMapper 以引发未经检查的异常(例如:RuntimeException),然后代码流将跳转到内部以捕获块(由 Lombok 生成)并且 @SneakyThrows 将被覆盖。

【讨论】:

    【解决方案2】:

    你不能忽略某个代码路径,jacoco 不支持它(它也不能忽略一个方法)。由于缺乏更好的术语,它的度量单位是.class 文件。由于 jacoco 会查看 .class 文件,该文件是在 lombok 处理器启动后生成的 - 你只需拥有未经测试的路径。

    简单地说,jacoco 看到您的文件就像它从未有过 lombok 注释一样。所以你不能“排除”注释。我感受到了你的痛苦——我们的模块中人们强制执行了非常多的覆盖率,而这些 catch 块几乎一直都未经测试。

    【讨论】:

    • 谢谢!那么有什么方法可以解决这个问题吗?例如,除了 jacoco,还有其他工具吗?
    • @ch271828n 例如有codecov,虽然它是商业的,afaik;我个人从未使用过它。 sonarqube 可能也有类似的东西
    • 我知道那些工具,但它们似乎不提供这种东西。还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2019-01-02
    • 2012-11-02
    • 2014-11-09
    • 2019-10-09
    • 2018-05-28
    • 2012-06-11
    相关资源
    最近更新 更多