java.lang.NoClassDefFoundError в junit - PullRequest
69 голосов
/ 19 ноября 2010

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

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

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

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

Ответы [ 14 ]

93 голосов
/ 19 ноября 2010
  1. Щелкните правой кнопкой мыши свой проект в Package Explorer> щелкните Свойства
  2. перейдите в Java Build Path> вкладка Библиотеки
  3. нажмите кнопку «Добавить библиотеку»
  4. выберите JUnit
  5. нажмите Далее.
  6. выберите из выпадающего меню JUnit4 или другие новые версии.
  7. нажмите "Готово".
  8. Тогда ок.
19 голосов
/ 12 октября 2016
  1. Eclipse -> Главное меню -> Выполнить -> Выполнить настройки
  2. Удалить все вхождения теста.Ваш тест может отображаться как YourTest.Method_1 ().Удалите это также.
  3. Перезапустите.Позвольте Eclipse создать новую конфигурацию.

Приложение: Локально я создал «Библиотеку пользователя» и добавил в свои проекты, которая имеет

hamcrest-core-1.3.jar

junit-4.12.jar

11 голосов
/ 26 февраля 2013

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

9 голосов
/ 13 апреля 2015

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

3 голосов
/ 29 августа 2018

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

Щелкните правой кнопкой мыши по тестовому файлу, который вы хотите запустить, Выберите Run As -> Run Configurations -> Select вкладка Classpath -> Select to boottrap Entries -> Select Advanced -> Select Add library -> Select JUnit -> Next -> Select JUnit4 из выпадающего списка -> Finish

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

2 голосов
/ 19 ноября 2010

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

1 голос
/ 21 мая 2018

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

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

Спасибо за ответы на эти вопросы: https://stackoverflow.com/a/34067333/5538923 и https://stackoverflow.com/a/39987979/5538923).

1 голос
/ 26 сентября 2014

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

  1. выберите проект -> buildpath -> добавьте библиотеки и выберите junit (он содержит как junit, так и hamcrest-core)
  2. загрузите hamcrest-coreиз репозитория Maven и добавьте его в свой путь к классам.
1 голос
/ 06 июля 2013
  1. Убедитесь, что для переменной среды JUNIT_HOME установлено значение c: \ JUNIT.
  2. затем В конфигурации запуска> выберите classpath> добавить внешние jar junit-4.11.jar
1 голос
/ 03 мая 2012

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

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

до:

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

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

...