向聪明的人们问好,
我正在使用cobertura和mockito &powermocktio获取代码覆盖率。我的机器安装了1.7java版本。
当我在eclipse中运行junit测试用例时,所有的测试用例都通过了。但是当我运行时,
mvn cobertura: cobertura
我得到以下错误。
. lang。ClassFormatError:类中的无效方法代码长度为75567文件
我研究了一下,知道这是因为JVM为一个方法分配了内存大小。
我的测试类引用了一个遗留的类,它有一个非常大的静态方法,我不能去触摸遗留的或主类,因为有太多的影响。
在不触及主类的情况下摆脱此异常的任何想法都将受到赞赏。
谢谢Pradeep
简单,从Cobertura检测中排除遗留类。当使用Maven时,如下所示:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.6</version>
<configuration>
<instrumentation>
<excludes>
<exclude>aaa/**/Legacy.class</exclude>
</excludes>
</instrumentation>
</configuration>
</plugin>
您可以尝试在测试环境中禁用字节码验证(通过在JVM启动选项中添加-noverify)。
当然,在您的生产环境中不应该这样做;但是考虑到您的需求,这可能是您唯一的机会,您必须得到您的测试+覆盖到位。
但是:准备好迎接更多的丑陋的惊喜。Powermock(ito)以破坏覆盖测量而"出名"。实际上,我认为让这样的设置可靠地工作并创建健壮的覆盖率数字的机会相当小。