我们在项目中使用AspectJ以及Jacoco用于测试覆盖率报告,目前我们正面临一个问题,即由于AspectJ在编译阶段更改了字节代码,这使得代码覆盖率报告不正确。一个例子是由于AspectJ添加了额外的if-else语句,然后分支覆盖率显示类似于1/4但实际上在源代码中没有条件分支。有没有好的方法告诉Jacoco忽略AspectJ生成的所有代码?
非常感谢。
答案 0 :(得分:1)
我在这里复制我刚刚在JaCoCo邮件列表上写的答案:
如果您想避免从源代码编译,可以使用AspectJ的两个选项:
最简单的方法是单独测试您的方面,以及没有方面的Java代码,并且没有任何问题地测量覆盖范围。
答案 1 :(得分:0)
@RajeshTV:
如何使用clover-aspectj-compiler的说明如下:
https://confluence.atlassian.com/display/CLOVER/Clover+AspectJ+Compiler
这些说明也适用于OpenClover。只需下载:
接下来就像这样打电话给他们:
java -cp "clover-4.2.0.jar:clover-aspectj-compiler-1.0.0.jar:aspectjrt.jar:aspectjtools.jar" com.atlassian.clover.instr.aspectj.CloverAjc -d <output directory> <list of files>
它将在指定的目录中生成* .class文件,并创建clover.db数据库。
您必须从Maven构建中调用上述命令,例如使用exec:exec
目标。
请注意,clover-aspectj-compiler没有专门的Maven插件来自动执行此操作,因此编写整个管道是你的工作。