java.lang.NoClassDefFoundError в junit

82

Я получаю эту ошибку в 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
Крис Деннетт
источник
1
Какой класс отсутствует в соответствии с ошибкой?
BalusC

Ответы:

105
  1. Щелкните правой кнопкой мыши свой проект в проводнике пакетов> щелкните Свойства
  2. перейдите на вкладку Java Build Path> Libraries
  3. нажмите кнопку «Добавить библиотеку»
  4. выберите JUnit
  5. Нажмите "Далее.
  6. выберите в раскрывающемся списке JUnit4 или другие новые версии.
  7. нажмите "Готово".
  8. Тогда хорошо.
Крис Деннетт
источник
Это добавляет JUNIT в библиотеку, но теперь он говорит, что junit.org не может быть решен
5
Просто дважды проверьте, есть ли у вас библиотека Hamcrest также в пути к классам. Текущая версия JUnit 4 должна быть полностью инклюзивной, но иногда люди разделяют пакеты.
Берин Лорич
как мне действовать, если я использую командную строку linux? куда мне добавить эту банку?
vipin8169
Вышеупомянутые шаги работают нормально, и он берет банку из папки плагина eclipse. Но если мы добавим jar-файл junit в конфигурационный путь сборки в качестве внешнего jar-файла, он должен работать правильно? у меня это не сработало
Vineeth Bhaskaran
20
  1. Eclipse -> Верхнее меню -> Выполнить -> Конфигурации запуска
  2. Удалите все экземпляры вашего теста. Ваш тест может отображаться как YourTest.Method_1 (). Удалите и это.
  3. Повторно запустить. Пусть Eclipse построит новую конфигурацию.

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

hamcrest-core-1.3.jar

junit-4.12.jar

глубокая симметрия
источник
11

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

Alex
источник
10

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

Шины
источник
1
Это исправило NoClassDefFoundError: org/junit... caused by ClassNotFoundException: org.junit.runners.model.InitializationErrorдля меня. Я использовал Junit 4.8. Переход на 4.11 сработал.
Alex
6

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

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

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

Сана Джахан
источник
2

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

Торбьёрн Равн Андерсен
источник
2

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

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

Благодаря этим ответам за подсказку для этого решения: https://stackoverflow.com/a/34067333/5538923 и https://stackoverflow.com/a/39987979/5538923 ).

marcor92
источник
1

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

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

У меня это сработало.

Амит
источник
1

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

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

кому:

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

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

Дефрагментация
источник
1
  1. Убедитесь, что для переменной среды JUNIT_HOME установлено значение c: \ JUNIT.
  2. затем в конфигурации запуска> выберите путь к классам> добавьте внешние банки junit-4.11.jar
АнандСонаке
источник
1

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

  1. выберите проект -> путь к сборке -> добавьте библиотеки и выберите junit (он содержит как junit, так и hamcrest-core)
  2. загрузите hamcrest-core из репозитория maven и добавьте его в свой путь к классам.
ришабдаим
источник
1

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

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

плохой епископ
источник
1

В моем случае я добавил свои библиотеки в Modulepath вместо Classpath.

Это работает, только если JUnit правильно добавлен в Classpath.

введите описание изображения здесь

Даниэль Чунг
источник
0

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

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

Удджвал
источник
0

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

Рохит Шарма
источник
0

Я следил за этим видео: https://www.youtube.com/watch?v=WHPPQGOyy_Y, но не смог запустить тест. После этого я удалил все загруженные файлы и добавил Junit, как показано на рисунке.

введите описание изображения здесь

Woden
источник
-1

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

Предлагаю вам скачать JCreator.

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

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

Корзина
источник