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)
3. Перейдите в pom.xml и выполните поиск зависимостей "nature" (или зависимости, отвечающей за junit) и "jmockit", которые мы отметили в шагах № 1 и № 2 соответственно. Вы увидите, что зависимость от природы будет перечислена выше зависимости от jmockit.
4. Теперь просто скопируйте зависимость jmockit и поместите ее чуть выше зависимости природы-6.51 (которую я сделал, так как jz природы jar содержал junit в моем проекте)
Это сработало для меня успешно.:)
Проблема в моем случае заключалась в том, что тест был определен в main
исходная папка, а не test
исходная папка. Зависимости для jmockit и junit мы определили в pom с проверкой объема. Поэтому они не были доступны для этого теста.
Среда IDE не была такой строгой во время редактирования и компиляции, поэтому никаких предупреждений не было, но тесты провалились с той же странной ошибкой.