【问题标题】:java.lang.ClassFormatError: Invalid method Code length 75567 in class filejava.lang.ClassFormatError:类文件中的方法无效代码长度 75567
【发布时间】:2016-10-05 13:30:57
【问题描述】:

向聪明人问好,

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

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

mvn cobertura:cobertura

我收到以下错误。

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

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

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

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

谢谢 普雷迪普

【问题讨论】:

    标签: java mockito cobertura powermockito


    【解决方案1】:

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

    【讨论】:

    • 非常感谢罗杰。最初我认为排除不会涵盖覆盖范围。但它对我有用。
    【解决方案2】:

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

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

    但是:为更多丑陋的惊喜做好准备。 Powermock(ito) 因打破覆盖测量而“出名”。实际上,我认为让这样的设置可靠地工作并创建可靠的覆盖数字的机会相当很小

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 2018-06-09
      • 2014-11-26
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多