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> вкладка Бібліотеки
  3. натисніть кнопку "Додати бібліотеку"
  4. виберіть JUnit
  5. натисніть Далі.
  6. виберіть у спадному меню кнопку JUnit4 або інші нові версії.
  7. натисніть закінчити.
  8. Тоді добре.

Це додає JUNIT у бібліотеці, але тепер це означає, що junit.org не може бути вирішено

5
Просто перевірте, чи є у вас бібліотека Hamcrest також на шляху до класу. Поточна версія JUnit 4 повинна бути повністю включеною, але іноді люди розділяють пакети.
Berin Loritsch

як діяти далі, якщо я використовую командний рядок linux? куди я можу додати цю банку?
vipin8169

Вищевказані кроки працюють нормально, і він бере jar з папки плагіна eclipse. Але якщо ми додаємо файл junit jar до конфігурації шляху побудови як зовнішній 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 - потрібні обидві (в інструкції сказано завантажувати обидві, але я пропустив! На жаль)


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 спрацював.
Олексій

6

На Eclipse я зміг вирішити вищезазначену проблему, виконавши наступні кроки:

Клацніть правою кнопкою миші на тестовому файлі, який ви хочете запустити, виберіть Виконати як -> Запустити конфігурації -> Вибрати вкладку Шлях до класу -> Виділити до елементів завантаження -> Вибрати Додатково -> Вибрати Додати бібліотеку -> Вибрати JUnit -> Далі -> Виберіть JUnit4 зі спадного меню -> Готово

Потім виберіть Застосувати -> Виконати



2

Ці кроки спрацювали для мене, коли помилка показала відсутність класу Filter (як повідомляється у цьому помилково продубльованому питанні: JUnit: NoClassDefFoundError: org / junit / runner / manipulation / Filter ):

  1. Переконайтеся, що JUnit 4 посилався лише один раз у вашому проекті (я також видалив природу Maven, але не впевнений, чи цей крок впливає на вирішення проблеми) .
  2. Клацніть правою кнопкою миші файл, що містить модульні тести, оберіть Властивості, а під Налаштуваннями запуску / налагодження видаліть усі записи з Конфігурацій запуску для цього файлу. Натисніть Застосувати та закрийте.
  3. Клацніть правою кнопкою миші проект, що містить модульні тести, оберіть Властивості, а під Налаштуваннями запуску / налагодження видаліть усі записи, що включають JUnit, із Конфігурацій запуску. Натисніть Застосувати та закрийте.
  4. Очистіть проект і запустіть тест.

Дякую за ці відповіді за те, що ви дали мені підказку щодо цього рішення: https://stackoverflow.com/a/34067333/5538923 та https://stackoverflow.com/a/39987979/5538923 ).


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-core-ядро знаходиться не в класі, оскільки воно не поставляється безпосередньо з junit jar. Отже, є два шляхи вирішення цього:

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

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. Я додав явно у шлях до класу, і проблема була вирішена.



-1

Якщо у вас кілька версій Java, це може заважати роботі вашої програми.

Я пропоную вам завантажити JCreator.

Після цього натисніть кнопку налаштування, параметри та профілі JDK. Видаліть зі списку старі версії Java. Потім натисніть кнопку відтворення. Ваша програма повинна з’явитися.

Якщо ні, натисніть ctrl + alt + O, а потім натисніть кнопку відтворення ще раз.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.