java.lang.ClassFormatError: Invalid method Code length 75567 in class file

java.lang.ClassFormatError: Invalid method Code length 75567 in class file

向聪明人问好,

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

当我运行 eclipse 中的junit 测试用例时,所有的测试用例都通过了。 但是当我 运行 ,

mvn cobertura:cobertura

我遇到以下错误。

java.lang.ClassFormatError: Invalid method Code length 75567 in class file

我研究了一下才知道这是因为JVM给metod分配的内存大小。

我的测试 class 引用了一个 legacy class,它有一个非常庞大的静态方法。我不能去由于太多的影响,触摸遗留或主要 class 进行折射。

任何在不触及主要 class 的情况下摆脱此异常的想法将不胜感激。

谢谢 普拉迪普

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

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

但是接下来:为 更多 丑陋的惊喜做好准备。 Powermock(ito) 是 "famous" 用于中断覆盖测量。实际上,我认为让这样的设置可靠地工作并创建强大的覆盖率数字的机会相当

很简单,从 Cobertura 检测中排除遗留 class。使用 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>