我们在项目中使用AspectJ,并在Jacoco中使用测试覆盖率报告,目前我们正面临一个问题,即由于AspectJ在编译阶段改变了字节代码,这使得代码覆盖率报告不正确.一个例子是由于AspectJ添加了额外的if-else语句,然后分支覆盖显示了类似1/4但实际上源代码中没有条件分支.是否有一些好方法告诉Jacoco忽略AspectJ生成的所有代码?
非常感谢.
解决方法:
我在这里复制我刚刚在JaCoCo邮件列表上写的答案:
如果您想避免从源代码编译,您可以使用AspectJ的两个选项:
>将LTW与织造剂一起使用.
>将您的方面移动到单独的Maven模块中.使用常规Maven编译器插件编译Java模块,使用AspectJ Maven编译Aspect模块.然后创建另一个只使用AspectJ Maven的模块,以便在Java模块上进行二进制编织,同时使用先前创建的工件作为依赖项.在这种情况下,您需要确保JaCoCo离线检测在二进制编织完成之前绑定到一个阶段.
但是,最简单的方法是单独测试您的方面以及没有方面的Java代码,并且没有任何问题地测量覆盖范围.