java.lang.ClassFormatError:类文件中的代码长度为75567的无效方法

时间:2016-10-05 13:30:58

标签: java mockito cobertura powermockito

对聪明人的问候,

我正在使用cobertura以及 mockito & powermocktio 获取代码覆盖率。 我的机器安装了 1.7 java 版本。

当我在eclipse中运行junit测试用例时,所有测试用例都会通过。 但是当我跑步时,

mvn cobertura:cobertura

我收到了以下错误。

  

java.lang.ClassFormatError:类中的代码长度为75567的无效方法   文件

我研究过并知道这是因为JVM为metod分配的内存大小。

我的测试类是指一个遗产类,它有一个非常庞大的静态方法。由于影响很大,我无法去触摸旧版或主类进行折射。< /强>

任何想要摆脱这个例外而不触及主类的想法都会受到赞赏。

由于 普拉迪普

2 个答案:

答案 0 :(得分:2)

简单,从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>

答案 1 :(得分:0)

您可以尝试为您的测试环境禁用字节码验证(通过向您的JVM启动选项添加-noverify)。

当然,这不是你应该在生产环境中做的事情;但鉴于您的要求,您可能是唯一有机会获得测试+覆盖范围。

但随后:为更多丑陋的惊喜做好准备。 Powermock(ito)在打破覆盖率测量方面“很有名”。实际上,我认为你有可能让这样的设置可靠地工作并创建强大的覆盖率数字,而不是