Клас не знайдено виключення під час запуску тесту JUnit


117

Я отримую цю помилку під час запуску тесту JUnit в Eclipse:

Class not found com.myproject.server.MyTest
java.lang.ClassNotFoundException: com.myproject.server.MyTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
    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)

Я спробував додати JUnitбібліотеку в classpath, хоча я використовую maven, і бібліотека JUnit знаходиться в залежності від POM.

Я вже спробував очистити проект і створив новий тестовий випадок JUnit, використовуючи плагін JUnit для Eclipse, все ще отримуючи ту ж помилку.


10
спробуйте запустити, mvn clean testяк тільки вона складе всі тестові класи
Jigar Joshi

1
Чи можете ви перевірити, чи є com.myproject.server.MyTest у папці bin? Я маю на увазі, якщо вона не складена через помилку компіляції або побудови шляху, ви отримаєте цю помилку.
vikas

ви тестуєте один клас чи весь проект?
Doszi89


1
У моєму випадку запущені тести з використанням Maven працювали, але якщо я клацну правою кнопкою миші на тестовому класі та оберіть Run As -> JUnit Test, він повідомив про ClassNotFoundException. Я виправив це, клацнувши правою кнопкою миші на проект і перейшовши до Властивості -> Builders, а потім перемістив Maven Project Builder над Java Builder
xorcus

Відповіді:


120

Це, мабуть, відбувається тому, що при mvn clean compileвикористанні збирається лише вихідний код (я використовую maven 3.1.0, тому я не впевнений, чи завжди так поводився).

Якщо ви запустите mvn test, тестовий код буде також компільований, але тоді він запускає тести (що може бути не відразу бажаним, якщо ви намагаєтеся запустити їх через Eclipse.) Шляхом цього є додавання test-compileдо вашої послідовності команд Maven кожного разу ти робиш mvn clean. Наприклад, ви б бігли mvn clean compile test-compile.


1
У мене це було один раз, і відповідь Сломека спрацювала, і тоді ця сама помилка повторилася, тому мені довелося також спробувати це. Зараз це знову добре працює, тож, щоб бути безпечним, ви, можливо, захочете виконати обидві речі.
Роджер

Дякую, це працювало на мене. Але в моєму випадку це не спрацювало до кінця і відновило проект у затемненні.
Параміш Корракуті

Простими словами зробіть 'mvn clean test-compile', а потім запустіть свої тести Junit у затемненні. Це працювало для мене. Дякую.
Срерам

103

У мене були подібні проблеми з моїми тестами і я виявив десь в Інтернеті, що вам потрібно перейти до Build Path у властивостях вашого проекту та перемістити Maven Dependpendations над системною бібліотекою JRE . Це, здається, працювало на мене.


1
Спасибі це вирішило мою проблему. Фактичний тест отримував помилку класу не знайдено, коли я намагався запустити його. Я думаю, що це, мабуть, кращий перший крок перед додаванням додаткових цілей збирання mvn.
Роджер

8
Цей метод описаний на знімках екрана в цій публікації (якщо кроки не зрозумілі з відповіді @ slomek вище)
nhylated

2
Я не зміг перенести керовані залежності Maven над Бібліотекою системи JRE на Eclipse Mars 2, але я міг клацнути правою кнопкою миші проект і перейти до Властивості -> Builders, а потім перемістити Maven Project Builder над Java Builder, і він працював на мене.
xorcus

Я спробував усе вищесказане, і це не вийшло, я також не зміг перенести Maven Dependents про системну бібліотеку JRE, але це було на вкладці Бібліотеки. Потім я перейшов до Build Path -> Order & Export -> як зміг перемістити Maven Dependpendations над бібліотекою системи JRE. Тоді я створив проект і запустив установку Maven, після чого тест пройшов успішно.
Меган

22

Я зіткнувся з тією ж проблемою , і я був в змозі виправити це з допомогою @ slomek в відповідь , але питання спливли після цього.

Я нарешті виправив це, додавши вихідну папку мого проекту до конфігурації запуску тесту JUnit. Кроки:

  • Знайдіть вихідну папку вашого проекту з Project properties -> Java Build Path -> Default output folder
    • Зазвичай це так <project-folder>/bin
  • Йти до Run -> Run Configurations...
  • Клацніть на конфігурацію запуску тестування блоку та натисніть на Classpathвкладку
  • Явно додайте під папку виводу проекту під папку User Entries- навіть якщо проект вже включений туди
    • Клацніть на, Advanced -> Add folderщоб додати вихідну папку

Ця проблема може бути пов’язана з дивними налаштуваннями проектів у Eclipse - наприклад, вихідна папка з вкладеними проектами Maven, імпортованими як один проект / папка (принаймні, так налаштовувався мій проект).


Дуже дякую; У мене була ця проблема. Ваше виправлення працювало на мене; перші два не зробили. Вгору проголосували.
давтом

Абсолютно геніально! Через це я чухав голову століттями. Дякую!
RayCh

17

Якщо ця проблема виникає лише в Eclipse, виконання команди Project -> Clean ... для вибраного проекту може допомогти.


Дякую - це насправді спрацювало для мене - JAVE EE eclipse gradlew
Abdeali Chandanwala

11

Спробувавши все тут, не вдосконалюючись, я вирішив свою проблему, просто перезапустивши Eclipse


5

Я вирішив свою проблему, запустивши оновлення Maven. Клацніть правою кнопкою миші проект свого проекту> Maven> Update Project


3

У моєму випадку я мав неправильну структуру каталогів Maven.

Який має бути таким:

/ src / test / java / com.myproject.server.MyTest

Після того, як я це зафіксував - все працювало як шарм.


2

У моєму випадку лише наступні кроки допомогли мені вирішити цю проблему:

  1. Проект-> Властивості-> Параметри запуску / налагодження.
  2. У "Запустіть конфігурації для" ..... "" виберіть класи / проекти
  3. Редагувати -> Classpath -> "Відновити записи за замовчуванням"

Дякую!! Тільки цей мені допоміг !!
sumandas

1

Раніше в цьому випадку я завжди робив mvn eclipse:eclipseі перезапускав Eclipse, і він працював. Після переходу на GIT він перестав працювати для мене, що дещо дивно.

Основна проблема тут в тому, що містер Екліпс не знаходить компільований клас. Потім я встановив вихідну папку як Project / target / test-класи, яка за замовчуванням генерується, mvn clean installне пропускаючи тест, і приступаю до наступного вирішення:

Варіант 1: Встановити класний шлях для кожного тестового випадку

Затемнення -> Виконати -> Запустити конфігурації -> в розділі JUnit-> вибрати мітест -> на вкладці classpath-> Вибрати записи користувача-> Додатково-> Додати папку -> Вибрати -> Застосувати-> Запустити

Варіант 2: Створіть змінну classpath і включіть її в classpath для всіх тестових випадків

Eclipse -> Windows -> Змінні Classpath -> New -> [Назва: Junit_test_cases_cp | path:] -> ok Потім перейдіть до Eclipse-> Run (Виконати конфігурації) -> JUnit-> select mytest -> на вкладці classpath -> Select User Entries-> Advanced-> Add classpath variables-> Select Junit_test_cases_cp-> ok- > Застосувати-> Виконати

Це єдине, що зараз працює для мене після спробу всіх пропозицій в Інтернеті.


1

У мене була така ж проблема з проектом Gradle з тестовим SourceSet з двома ресурсними каталогами.

Цей фрагмент походить з main-module.gradle і додає ресурс dir до тесту SourceSet:

sourceSets {
    test {
        resources {
            srcDir('../other-module/src/test/resources')
        }
    }
}

Для цього у мене були два каталоги ресурсів, пов'язані з тестовим SourceSet головного модуля проекту:

../other-module/src/test/resources src / test / ресурси (відносно папки головного модуля, автоматично додається плагіном Java)

Я виявляю, що якщо у мене були два файли з однаковим іменем в обох вихідних каталогах, щось на етапі ресурсів процесу пішло не так. Як результат, компіляція не розпочалася, і з цієї причини жоден .class не був скопійований у каталог bin, де JUnit шукав класи. ClassNotFoundException зник просто перейменувавши один із двох файлів.


1

NoClassDefFoundError насправді означає, що він не може ініціювати клас. Це не має нічого спільного з пошуком класу. Я отримав цю помилку під час виклику trim () на null String.

JUnit не покаже NullPointerException. Рядок не є нульовим при нормальному запуску, тому що я отримую рядок з файлу властивостей, який не доступний для тестів.

Моя порада - вилучити шматки з класу, поки ваші тести не почнуть проходити. Тоді ви можете визначити, який рядок видає помилку.


0

У мене була аналогічна проблема з моїм Eclipse Helios, який налагоджував Junits. Моя проблема мало відрізнялася, оскільки я міг успішно запускати Junits, але коли я отримував ClassNotFoundException під час налагодження тих же JUNIT.

Я спробував усілякі різні рішення, доступні на Stackoverflow.com та форумах в інших місцях, але нічого, здається, не працює. Після удару головою над цим питанням протягом майже двох днів, нарешті, я зрозумів її рішення.

Якщо жодне з рішень не працює, просто видаліть папку .metadata, створену у вашій робочій області. Це створило б додатковий накладний імпорт проектів і всілякої конфігурації, яку ви зробили, але це, безумовно, вирішить цю проблему.

Сподіваюсь, це допомагає.


Як зауваження ... для цього вам потрібно буде відновити своє оточення. Тож поки це може вирішити, просто будьте в курсі того, що ви збираєтесь робити ...
Боб

0

Ці кроки працювали для мене.

  • Видаліть вміст локального сховища Maven.
  • запустіть mvn clean install в командному рядку. (cd до каталогу pom).
  • Створіть проект у затемненні.

0

1- mvn затемнення: затемнення

2 - проект очистити всі проекти

3- перезапуск


0

Варто згадати як ще одну відповідь, що якщо ви використовуєте eGit, і ваш classpath оновлюється через, скажімо, інструмент для тестового покриття, як Clover, що іноді є іконка очищення, яка не повністю видаляє вміст /path/to/git/repository/<project name>/bin/

По суті, я використав перегляд журналу помилок Eclipse, визначив, що викликає проблеми під час цього очищення, перейшов до каталогу джерел і видалив <project name>/binкаталог вручну . Як тільки це закінчилося, я повернувся до Eclipse і оновив ( F5) свій проект, і помилка пішла.


0

Перевірте, чи ваш проект відкрито як проект Maven, а не просто звичайний проект Java. Насправді не маніпулятор, але це точно та сама причина, чому ви можете це пропустити.


0

Це також може бути пов'язано з "[ПОМИЛКА] У цьому середовищі не передбачений компілятор. Можливо, ви працюєте на JRE, а не на JDK?"


0

Я зіткнувся з тим же питанням. Я вирішив це, видаливши зовнішню залежність від JUnit jar, яку я додав, завантажуючи з Інтернету зовні. Але потім я перейшов до проекту-> властивості-> шлях до збірки-> додати бібліотеку-> юніт-> обрав версію (ex junit4) -> застосувати.

Це автоматично додало залежність. це вирішило моє питання.


0

Внесення змін у манекен та збереження тестового класу може вирішити проблему. Він створить .class автоматично


0

Здається скласти випуск. Запустити проект як тест Maven, а потім запустити як JUnit Test.



0

Перевірте, чи ви додали junit4 як залежність.

напр

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

-5

Можливо, ви забули помістити клас основного та тестового випадку в / src / test / java. Перевірте це один раз.


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