Jacoco代码覆盖范围受AspectJ的影响

shi*_*zhz 5 java code-coverage aspectj jacoco

我们在项目中使用AspectJ,在测试覆盖率报告中也使用Jacoco,当前我们面临一个问题,由于AspectJ在编译阶段更改了字节代码,这使得代码覆盖率报告不正确。一个例子是由于AspectJ添加了额外的if-else语句,然后分支覆盖率显示了1/4之类的东西,但实际上在源代码中没有条件分支。有什么好办法告诉Jacoco忽略AspectJ生成的所有代码?

非常感谢。

kri*_*aex 1

我在这里复制我刚刚在 JaCoCo 邮件列表上写的答案:

如果您想避免从源代码编译 AspectJ,您有两个选择:

  1. LTW 与织造剂一起使用。
  2. 将您的方面移至单独的 Maven 模块中。使用普通的 Maven 编译器插件编译 Java 模块,使用 AspectJ Maven 编译方面模块。然后创建另一个仅使用 AspectJ Maven 的模块,以便在 Java 模块上进行二进制编织,并使用之前创建的工件作为依赖项。在这种情况下,您需要确保 JaCoCo 离线检测在二进制编织完成之前绑定到某个阶段。

不过,最简单的方法是单独测试您的方面以及没有方面的 Java 代码,并毫无问题地测量覆盖率。