Jacoco 会利用编译器在编译期间加入 JacocoData成员变量,如果使用反射循环成员变量进而拼凑set或者get方法,会产生NoSuchMethodException,建议在循环中利用isSynthetic()方法检查成员变量。
Eclipse中的Coverage 插件是使用jacoco来统计单元测试的代码覆盖率,会在类中加入 JacocoData成员变量,会导致反射循环成员变量进而拼凑set或者get方法时抛出NoSuchMethodException。
for (Field f : obj.getClass().getDeclaredFields()) {
f.setAccessible(true);
String g = f.getName();
if (g.equals("serialVersionUID")) {
continue;
}
//过滤jacoco编译期间加入的 JacocoData 字段
if (f.isSynthetic()) {
continue;
}
if (f.get(obj) != null) {
flag = true;
return flag;
}
}

本文探讨了在使用Jacoco进行代码覆盖率统计时遇到的NoSuchMethodException问题,特别是在反射操作中。文中提供了检查和过滤JacocoData成员变量的方法,避免了在反射过程中产生异常。
6073

被折叠的 条评论
为什么被折叠?



