如何在 Jacoco 代码覆盖率中忽略 Lombok 的@SneakyThrows?

How to ignore @SneakyThrows of Lombok in Jacoco code coverage?

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

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

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

感谢任何建议!

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

简而言之,jacoco 看到您的文件就像从未有过 lombok 注释一样。所以你不能“排除”注释。我感受到了你的痛苦——我们有一些模块,人们在这些模块中强制实施了大量的覆盖,而这些 catch 块几乎一直都未经测试。

我对此的解决方案是尝试模拟 objectMapper 以抛出未经检查的异常(例如:RuntimeException),然后代码流将跳入 catch 块(由 Lombok 生成)并且 @SneakyThrows 将被覆盖.