Ява.ленг.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 60

14 ответов:

  1. щелкните правой кнопкой мыши проект в Обозревателе пакетов > выберите Свойства
  2. перейдите на вкладку Java Build Path > Libraries
  3. нажмите на кнопку "добавить библиотеку"
  4. выберите JUnit
  5. нажмите кнопку Далее.

вы должны быть в состоянии обрабатывать его оттуда.

  1. Eclipse - > верхнее меню - > Run - > Run Configuration
  2. удалить все вхождения вашего теста. Ваш тест может отображаться как YourTest.Method_1 (). Удалите и это тоже.
  3. повторный запуск. Пусть Eclipse построит новую конфигурацию.

добавление: локально я создал "пользовательскую библиотеку" и добавил в свои проекты, которые имеют

hamcrest-core-1.3.jar

junit-4.12.jar

та же проблема может возникнуть, если вы загрузили JUnit jar с сайта JUnit, но забыли загрузить Hamcrest jar - оба необходимы (инструкции говорят, чтобы загрузить оба, но я пропустил вперед! Ой)

при использовании в Maven обновите артефакт junit: junit, например, с 4.8.2 до 4.11.

класс org/hamcrest / SelfDescribing не находится в пути к классу времени выполнения.

попробуйте выполнить следующие шаги:

  1. перейдите к конфигурации запуска вашего проекта. В разделе classpath, и добавить библиотеку JUnit.
  2. повторите те же шаги.

Это сработало для меня.

у меня была та же проблема, проблема была в @ContextConfiguration во мне тестовых классов, я загружал контекст сервлета тоже я просто изменить:

@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })

to:

@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })

и все. таким образом, я загружаю только все файлы с шаблоном *-context.xml во мне тестовый путь.

  1. убедитесь, что переменная окружения JUNIT_HOME имеет значение c:\JUNIT.
  2. затем в run configuration > select classpath > add external jars junit-4.11.банку

причина этого заключается в том, что jar "hamcrest-core" не находится в classpath, поскольку он не поставляется непосредственно с JUnit jar. Таким образом, есть два способа решить эту проблему:

  1. выберите проект - > buildpath - > добавить библиотеки и выберите junit (он содержит как junit & hamcrest-core)
  2. загрузите hamcrest-core из РЕПО maven и добавьте его в свой путь к классам.

эти шаги работали для меня, когда ошибка показала, что класс фильтра отсутствует (как сообщалось в этом false-diplicated вопрос: JUnit: NoClassDefFoundError: org / junit / runner / manipulation / Filter):

  1. убедитесь, что JUnit 4 упоминается только один раз в вашем проекте (Я также удалил природу Maven, но я не уверен, что этот шаг имеет какое-либо влияние на решение проблема).
  2. щелкните правой кнопкой мыши file содержащий модульные тесты, выберите Свойства и в разделе Параметры запуска/отладки удалите все записи из конфигураций запуска для этого файла. Нажмите Применить и закрыть.
  3. щелкните правой кнопкой мыши проект содержащий модульные тесты, выберите Свойства и в разделе Параметры запуска/отладки удалите все записи вовлечение JUnit из конфигураций запуска. Нажмите Применить и закрыть.
  4. очистите проект и запустите тест.

спасибо эти ответы для того, чтобы дать мне подсказку для этого решения: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, а затем снова нажмите кнопку воспроизведения.