Подтвердить что ты не робот

Java.lang.NoClassDefFoundError в junit

Я получаю эту ошибку в java в моем тестовом коде junit. Я посмотрел в сети, и он говорит, что мне нужно добавить junit.jar в путь к классам.

В Eclipse я добавил его в путь к классам окна "Свойства проекта", но я все еще получаю ошибку инициализации. Что мне делать??

Это полный след ошибки:

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.access$000(Unknown Source)
    at java.net.URLClassLoader$1.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$1.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
4b9b3361

Ответ 1

  1. Щелкните правой кнопкой мыши свой проект в Package Explorer> щелкните Свойства
  2. перейдите на вкладку "Путь сборки Java"> вкладка "Библиотеки"
  3. нажмите кнопку "Добавить библиотеку"
  4. выберите JUnit
  5. нажмите Далее.
  6. выберите в выпадающем меню JUnit4 или другие новые версии.
  7. нажмите Готово.
  8. Тогда хорошо.

Ответ 2

  • Eclipse → Главное меню → Выполнить → Запустить конфигурации
  • Удалите все вхождения теста. Ваш тест может отображаться как YourTest.Method_1(). Удалите это также.
  • Повторно запустить. Пусть Eclipse построит новую конфигурацию.

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

hamcrest-core-1.3.jar

junit-4.12.jar

Ответ 3

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

Ответ 4

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

Ответ 5

В Eclipse мне удалось решить вышеуказанную проблему, выполнив следующие действия:

Щелкните правой кнопкой мыши на тестовом файле, который вы хотите запустить, Выберите "Выполнить как" → "Выполнить конфигурации" → "Выбрать вкладку" Путь к классам "-> Выбрать записи начальной загрузки" → "Выбрать расширенную" → "Выбрать" - "Выбрать" → "Выбрать JUnit" → "Далее" → "Выбрать JUnit4" из раскрывающегося списка → "Готово"

Затем выберите Применить → Выполнить

Ответ 6

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

Ответ 7

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

  • Перейдите в конфигурацию запуска проекта. На вкладке Classpath добавьте библиотеку JUnit.
  • Повторите те же действия.

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

Ответ 8

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

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

в

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

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

Ответ 9

  • Убедитесь, что переменная среды JUNIT_HOME установлена ​​в c:\JUNIT.
  • Затем в конфигурации запускa > выберите classpath > добавить внешние jars-junit-4.11.jar

Ответ 10

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

  • выберите проект → buildpath → добавьте библиотеки и выберите junit (он содержит как junit, так и hamcrest-core)
  • загрузите hamcrest-core из maven repo и добавьте это в свой путь к классам.

Ответ 11

Эти шаги спомогли мне, когда ошибка показала, что класс Filter отсутствует (как сообщается в этом ложно заданном вопросе: JUnit: NoClassDefFoundError: org/junit/runner/манипуляция /Filter):

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

Спасибо за ответы на эти вопросы: fooobar.com/questions/714308/... и fooobar.com/questions/95430/...).

Ответ 12

Добавление двух моих центов к другим ответам.

Проверьте, не случайно ли вы создали свой тестовый класс под src/main/java вместо обычного src/test/java. Первый используется по умолчанию в Eclipse, когда вы по какой-либо причине создаете новый тестовый класс, и его можно не заметить. Это может быть так просто.

Ответ 13

Эта ошибка также возникает, если в пути к классам присутствует 2 версии hamcrest-library или hamcrest-core.

В файле pom вы можете исключить дополнительную версию и она работает.

Ответ 14

даже Junit4.11.jar не имеет hamcrest-core.jar. Я добавил явно в путь к классам, и проблема была решена.

Ответ 15

Если у вас несколько версий java, это может помешать вашей программе.

Я предлагаю вам загрузить JCreator.

Когда вы это сделаете, нажмите "Настройка", "Параметры" и "Профили JDK". Удалите старые версии Java из списка. Затем нажмите кнопку воспроизведения. Ваша программа должна появиться.

Если это не так, нажмите ctrl + alt + O, а затем снова нажмите кнопку воспроизведения.