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

Я получаю исключение ниже, когда пытаюсь запустить тестовые примеры Junit. Если я изменяю порядок входа в classpath, он работает нормально, но покрытие Jococo не работает. Оно зависает. Может ли кто-нибудь, пожалуйста, помогите решить эту проблему.

<classpathentry kind="lib" path="libt/junit-4.8.2.jar"/>
<classpathentry kind="lib" path="lib/jmockit.jar"/>
java.lang.IllegalStateException: JMockit wasn't properly initialized; check that jmockit.jar precedes junit.jar in the classpath (if using JUnit; if not, check the documentation)
    at com.amica.bc.testutil.BillingCenterTestUtil$1.<init>(BillingCenterTestUtil.java:18)
at com.amica.bc.testutil.BillingCenterTestUtil.setCurrentUserName(BillingCenterTestUtil.java:18)
    at amica.util.logging.TestAmicaGWLogger.setUp(TestAmicaGWLogger.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

3 ответа

СИМПТОМ: Ошибка при запуске maven с Jmockit и junit в проект Java.

СООБЩЕНИЕ: JMockit не был правильно инициализирован; проверьте, что jmockit.jar предшествует junit.jar в пути к классам (если используется JUnit; если нет, проверьте документацию)

ПРИЧИНЫ:

Неправильно настроен в файле POM.xml. Jmockit зависимость является после джунит.

РЕШЕНИЯ:

Отредактируйте файл POM.xml. Jmockit.jar должен предшествовать junit.jar, тогда зависимость jmockit должна предшествовать junit.

Официальный гид говорит нам следующее:

JMockit также требует использования параметра инициализации JVM -javaagent; при использовании плагина Maven Surefire для выполнения теста он указывается следующим образом:

<plugins>
   <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.21.0</version> <!-- or some other version -->
      <configuration>
         <argLine>
            -javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
         </argLine>
         <!-- ... -->
      </configuration>
   <plugin>
   <!-- ... -->
<plugins> 

Больше подробностей здесь и здесь.

Я столкнулся с подобной проблемой при запуске моего автономного приложения, которое требует как jars junit-4.8.1.jar, так и jmockit-0.999.4.jar. Ниже приведены шаги, которые я сделал, чтобы сделать эту работу:

1. Перейдите на pom.xml. Нажмите на опцию иерархии зависимостей и введите "junit" в строке поиска. Отсюда вы узнаете, от какой зависимости исходит ваша "джунит". Здесь я обнаружил, что в моем проекте была ответственность "nature-6.51" (запишите все, что есть).

зависимость от джунта

2. Введите "jmockit" в строке поиска и запишите зависимость, показанную здесь (jmockit-0.999.4)

зависимость от jmockit

3. Перейдите в pom.xml и выполните поиск зависимостей "nature" (или зависимости, отвечающей за junit) и "jmockit", которые мы отметили в шагах № 1 и № 2 соответственно. Вы увидите, что зависимость от природы будет перечислена выше зависимости от jmockit.

4. Теперь просто скопируйте зависимость jmockit и поместите ее чуть выше зависимости природы-6.51 (которую я сделал, так как jz природы jar содержал junit в моем проекте)

Это сработало для меня успешно.:)

Проблема в моем случае заключалась в том, что тест был определен в main исходная папка, а не test исходная папка. Зависимости для jmockit и junit мы определили в pom с проверкой объема. Поэтому они не были доступны для этого теста.

Среда IDE не была такой строгой во время редактирования и компиляции, поэтому никаких предупреждений не было, но тесты провалились с той же странной ошибкой.

Другие вопросы по тегам