JMockit не был правильно инициализирован

Я использую junit 4.12, jmockit 1.19 и spring-test 4.1.1.RELEASE для тестирования моего Java-проекта Spring MVC.

Порядок этих зависимостей в моем pom.xml:

  • jmockit
  • junit
  • spring-test

Тестовые примеры для сервисного уровня работают нормально. Я использую spring-test только для тестирования контроллеров. При тестировании контроллера я получил следующую ошибку:

java.lang.IllegalStateException: JMockit не был правильно инициализирован; убедитесь, что jmockit предшествует junit в пути к классам среды выполнения, или используйте @RunWith(JMockit.class)

Для сервисного уровня я решил эту ошибку, используя @RunWith(JMockit.class ) в тестовом классе.

Но для контроллера мне нужно аннотировать @RunWith(SpringJUnit4ClassRunner.class ).

Как решить эту ошибку?

Примечание. Я поставил jmockit перед junit в pom.xml


person Dev    schedule 28.09.2015    source источник
comment
Если вы можете выполнить обновление до Spring Framework 4.2.1, теперь есть первоклассная поддержка JUnit Rules. Так что вам не нужны SpringJUnit4ClassRunner: docs.spring.io/spring/docs/current/spring-framework-reference/   -  person Sam Brannen    schedule 28.09.2015
comment
Я считаю, что вам нужно будет показать пример тестового класса и пример файла pom.xml, который воспроизводит проблему. Я тестировал эту комбинацию инструментов (jmockit, junit и spring-test), но не видел сбоев при инициализации.   -  person Rogério    schedule 29.09.2015


Ответы (3)


Я не совсем уверен, что это решит вашу проблему, так как я только начал использовать jmockit и столкнулся с похожими проблемами стиля.

Вы пытались использовать -javaagent:? Самый простой способ применить ко всем тестам JUnit (Eclipse) — перейти к настройкам JRE и добавить в качестве аргумента VM (Preferences->JRE->Edit->VM Defaults).

Кроме того, я нашел плагин Eclipse JMockit через Marketplace, который автоматически добавляет javaagent к любым тестам junit, чтобы избежать конфигурации JRE.

Наконец, в вашем POM вы можете попробовать (хотя я сам еще не тестировал):

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-javaagent:${org.jmockit:jmockit:jar}</argLine>
            </configuration>
        </plugin>

Однако имейте в виду, что это будет работать только для тестов, запущенных maven, а не через IDE. Я не нашел для плагина m2e способа понять требование добавить javaagent к тестам junit.

person Eric B.    schedule 28.09.2015

Попробуйте обновить свой проект Maven. В Eclipse щелкните правой кнопкой мыши свой проект и выберите Maven > Обновить проекты...

person Cole Miesner    schedule 12.07.2018

Мой тест работает, когда я использую JMockit версии 1.41, но получаю ту же ошибку в более поздних версиях репозиторий Maven

Ошибка: java.lang.IllegalStateException: JMockit не был правильно инициализирован;

person Gryffe    schedule 22.05.2019