#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) «известен» тем, что нарушает измерения покрытия. На самом деле, я думаю, что ваши шансы заставить такую настройку работать надежно и создавать надежные номера покрытия довольно малы.