Ява.ленг.NoClassDefFoundError в junit
Я получаю эту ошибку в java в моем тестовом коде junit. Я посмотрел в сети, и он говорит, что мне нужно добавить junit.jar в classpath.
в Eclipse я добавил его в classpath свойств проекта windows, но я все еще получаю ошибку инициализации. Что же мне делать?.?
Это полный след ошибки:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access0(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
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)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
at java.net.URLClassLoader.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 25 more
14 ответов:
- щелкните правой кнопкой мыши проект в Обозревателе пакетов > выберите Свойства
- перейдите на вкладку Java Build Path > Libraries
- нажмите на кнопку "добавить библиотеку"
- выберите JUnit
- нажмите кнопку Далее.
вы должны быть в состоянии обрабатывать его оттуда.
- Eclipse - > верхнее меню - > Run - > Run Configuration
- удалить все вхождения вашего теста. Ваш тест может отображаться как YourTest.Method_1 (). Удалите и это тоже.
- повторный запуск. Пусть Eclipse построит новую конфигурацию.
добавление: локально я создал "пользовательскую библиотеку" и добавил в свои проекты, которые имеют
hamcrest-core-1.3.jar
junit-4.12.jar
та же проблема может возникнуть, если вы загрузили JUnit jar с сайта JUnit, но забыли загрузить Hamcrest jar - оба необходимы (инструкции говорят, чтобы загрузить оба, но я пропустил вперед! Ой)
попробуйте выполнить следующие шаги:
- перейдите к конфигурации запуска вашего проекта. В разделе classpath, и добавить библиотеку JUnit.
- повторите те же шаги.
Это сработало для меня.
у меня была та же проблема, проблема была в @ContextConfiguration во мне тестовых классов, я загружал контекст сервлета тоже я просто изменить:
@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })
to:
@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })
и все. таким образом, я загружаю только все файлы с шаблоном *-context.xml во мне тестовый путь.
- убедитесь, что переменная окружения JUNIT_HOME имеет значение c:\JUNIT.
- затем в run configuration > select classpath > add external jars junit-4.11.банку
причина этого заключается в том, что jar "hamcrest-core" не находится в classpath, поскольку он не поставляется непосредственно с JUnit jar. Таким образом, есть два способа решить эту проблему:
- выберите проект - > buildpath - > добавить библиотеки и выберите junit (он содержит как junit & hamcrest-core)
- загрузите hamcrest-core из РЕПО maven и добавьте его в свой путь к классам.
эти шаги работали для меня, когда ошибка показала, что класс фильтра отсутствует (как сообщалось в этом false-diplicated вопрос: JUnit: NoClassDefFoundError: org / junit / runner / manipulation / Filter):
- убедитесь, что JUnit 4 упоминается только один раз в вашем проекте (Я также удалил природу Maven, но я не уверен, что этот шаг имеет какое-либо влияние на решение проблема).
- щелкните правой кнопкой мыши file содержащий модульные тесты, выберите Свойства и в разделе Параметры запуска/отладки удалите все записи из конфигураций запуска для этого файла. Нажмите Применить и закрыть.
- щелкните правой кнопкой мыши проект содержащий модульные тесты, выберите Свойства и в разделе Параметры запуска/отладки удалите все записи вовлечение JUnit из конфигураций запуска. Нажмите Применить и закрыть.
- очистите проект и запустите тест.
спасибо эти ответы для того, чтобы дать мне подсказку для этого решения:https://stackoverflow.com/a/34067333/5538923 и https://stackoverflow.com/a/39987979/5538923).
на Eclipse я смог решить эту проблему, выполнив следующие действия:
щелкните правой кнопкой мыши на файл, который вы хотите запустить, выберите Запуск от имени - > запустить конфигурации - > выберите вкладку Classpath - > выберите в записи начальной загрузки - > выберите дополнительно - > выберите Добавить библиотеку - > выберите JUnit- > Далее->выберите JUnit4 из раскрывающегося списка -> готово
Выберите Применить -> Выполнить
эта ошибка также возникает, если в пути к классам присутствуют 2 версии hamcrest-library или hamcrest-core.
в файле pom вы можете исключить дополнительную версию, и она работает.
даже Junit4.11.банки не имеют hamcrest-ядра.сосуд. Я добавил явно в classpath и проблема была решена.
Если у вас есть несколько версий java, это может помешать вашей программе.
Я предлагаю вам скачать JCreator.
при этом щелкните настроить, параметры и профили JDK. Удалить старые версии Java из списка. Затем нажмите кнопку воспроизведения. Ваша программа должна появиться.
Если это не так, нажмите ctrl+alt+O, а затем снова нажмите кнопку воспроизведения.