java.lang.ClassFormatError: недопустимая длина кода метода 75567 в файле класса

#java #mockito #cobertura #powermockito

#java #mockito #cobertura #powermockito

Вопрос:

Приветствия для умных людей,

Я использую cobertura вместе с mockito и powermocktio, чтобы получить покрытие кода. На моем компьютере установлена версия Java 1.7 .

Когда я запускаю тестовые примеры junit в eclipse, все тестовые примеры проходят. Но когда я запускаю ,

mvn cobertura: cobertura

Я получаю следующую ошибку.

java.lang.ClassFormatError: недопустимая длина кода метода 75567 в файле класса

Я исследовал и узнал, что это связано с объемом памяти, выделенным для метода JVM.

Мой тестовый класс ссылается на устаревший класс, который имеет статический метод, который очень огромен.Я не могу пойти и коснуться устаревшего или основного класса для рефракторинга из-за стольких воздействий.

Будут оценены любые идеи по избавлению от этого исключения, не затрагивая основной класс.

Спасибо, Прадип

Ответ №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>
  

Комментарии:

1. Огромное спасибо, Роджер. Изначально я думал, что исключение не будет охватывать покрытие. Но у меня это сработало.

Ответ №2:

Вы можете попробовать отключить проверку байт-кода (добавив -noverify в параметры запуска JVM) для вашей тестовой среды.

Конечно, это не то, что вы должны делать в своей производственной среде; но, учитывая ваши требования, это может быть единственным шансом, который у вас есть, получить ваше тестирование покрытие на месте.

Но тогда: будьте готовы к более неприятным сюрпризам. Powermock (ito) «известен» тем, что нарушает измерения покрытия. На самом деле, я думаю, что ваши шансы заставить такую настройку работать надежно и создавать надежные номера покрытия довольно малы.