ClassFormatError с использованием JMockit с EMMA - PullRequest
3 голосов
/ 25 мая 2009

Я пытаюсь использовать EMMA для измерения охвата некоторых тестов JUnit, использующих JMockit. Но когда я пытаюсь запустить тесты JMockit после инструментария с EMMA, примерно четверть тестов завершается с ошибкой:

com.logstorage.engine.sensor.SensorManagerTest.setUpBeforeClass(SensorManagerTest.java:98)
    java.lang.ClassFormatError
    at sun.instrument.InstrumentationImpl.redefineClasses0(Native Method)
    at sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:150)
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:152)
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:139)
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:73)
    at mockit.Mockit.setUpMock(Mockit.java:235)
    at com.myapp.MyTest.setUpBeforeClass(MyTest.java:98)

Я не вижу какой-либо картины относительно того, какие тесты провалились, а какие нет. Я думаю, это просто ошибка в JMockit, но кто-нибудь знает обходной путь?

Я нашел очень похожий вопрос под названием "Получение ClassFormatError с EMMA?" но решение не работает для меня (я не использую никакие методы reentrant = true mock). Есть другие идеи?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 29 мая 2009

Я столкнулся с той же проблемой - кажется, это исправило ее для меня и, надеюсь, поможет кому-то еще.

Если вы выполняете это через ant, убедитесь, что у вас нет vars в аргументе javac target * debuglevel. Следующая цель вызовет ошибку.

<javac srcdir="${src}" destdir="${bin}" debug="on" debuglevel="lines,source,vars" nowarn="true" /> 

Измените его на:

<javac srcdir="${src}" destdir="${bin}" debug="on" debuglevel="lines,source" nowarn="true">

Это, вероятно, ошибка JMockit - очень тонкая и раздражающая, чтобы узнать.

0 голосов
/ 16 августа 2016

Обновите jmockit с 1.5 до любой последней версии.

0 голосов
/ 23 сентября 2010

У моей команды была такая же проблема. Конкретный случай: использование jMockit для имитации статических методов из класса в наборе модульных тестов, работающем под TeamCity с EMMA в качестве инструмента покрытия. Решение было следующим:

Добавить метод разрыва к каждому тесту, который высмеивал статические методы:

@After
public void tearDown() throws Exception {
  Mockit.tearDownMocks(ClassWithStaticMethods.class);
}
0 голосов
/ 01 июля 2009

Я только видел этот вопрос сегодня, но если вы можете, пришлите мне несколько тестов, которые выдают ClassFormatError при работе с EMMA, и я попытаюсь найти ошибку в JMockit.

Кстати, вы пытались использовать JMockit Coverage? Просто добавьте jmockit-cover.jar в путь к классам и посмотрите, что вы получите. Как правило, это приведет к созданию (без какой-либо дополнительной настройки) красивого отчета о покрытии HTML в директории «cover-report» под рабочим каталогом. Это не может быть легче, чем это!

...