Класс не найден Исключение при запуске теста JUnit

Я получаю эту ошибку при запуске теста 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, все еще получая ту же ошибку.

Ответ 1

Это происходит потому, что при использовании mvn clean compile компилируется только исходный код (я использую maven 3.1.0, поэтому я не уверен, что он всегда вел себя так).

Если вы запустите mvn test, тестовый код также будет скомпилирован, но затем он запускает тесты (что может быть неразумно, если вы пытаетесь запустить их через Eclipse.) Путь вокруг этого заключается в том, чтобы добавить test-compile к вашей последовательности команд Maven всякий раз, когда вы выполняете mvn clean. Например, вы запустите mvn clean compile test-compile.

Ответ 2

У меня была аналогичная проблема с моими испытаниями и была найдена где-то в Интернете, что вам нужно перейти в "Путь сборки" в свойствах проекта и переместить Maven Dependencies выше JRE System Library. Кажется, это сработало для меня.

Ответ 3

У меня возникла та же проблема, и я смог исправить ее с помощью @slomek answer, но после этого проблема снова появилась.

Я, наконец, исправил это, добавив мою выходную папку проекта в конфигурацию тестового запуска JUnit. Шаги:

  • Найдите выходную папку проекта с Project properties -> Java Build Path -> Default output folder
    • Обычно это <project-folder>/bin
  • Перейдите к Run -> Run Configurations...
  • Выберите конфигурацию запуска unit test и нажмите вкладку Classpath
  • Явно добавить папку вывода проекта в User Entries - даже если проект уже включен
    • Нажмите Advanced -> Add folder, чтобы добавить выходную папку

Эта проблема может быть вызвана странной настройкой проекта в Eclipse - например, исходная папка с вложенными проектами maven, импортированными как один проект/папка (по крайней мере, так был установлен мой проект).

Ответ 4

Если эта проблема возникает только в Eclipse, может помочь выполнение команды Project → Clean... в выбранном проекте.

Ответ 5

Попробовав все здесь без каких-либо улучшений, я решил проблему, просто перезапустив Eclipse

Ответ 6

В моем случае у меня была неправильная структура каталога maven.

Какое должно быть:

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

После того, как я исправил это - все работало как шарм.

Ответ 7

Раньше в этом случае я всегда делал mvn eclipse:eclipse и перезапускал свой Eclipse, и он работал. После перехода на GIT он перестает работать для меня, что несколько странно.

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

Вариант 1: Установить путь к классам для каждого тестового примера

Eclipse → Run → Run Configurations → под JUnit- > выберите mytest → под вкладкой classpath- > Выбрать пользовательские записи- > Дополнительно- > Добавить папку → Выбрать → Применить- > Выполнить

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

Eclipse → Windows → Переменные класса → Новый → [Имя: Junit_test_cases_cp | путь:] → ok Затем перейдите к Eclipse- > Run → Run Configurations → JUnit- > выберите mytest → под вкладкой classpath → Выберите User Entries- > Advanced- > Добавить переменные pathpath- > Выберите Junit_test_cases_cp- > ok- > Apply- > Run

Это единственное, что в настоящее время работает для меня после того, как вы попробовали все предложения в Интернете.

Ответ 8

В моем случае только следующие шаги помогли мне решить эту проблему:

  • Project- > properties- > Run/Debug Settings.
  • В разделе "Конфигурации запуска для"..... "выберите классы/проекты
  • Изменить → Путь к классам → "Восстановить записи по умолчанию"

Ответ 9

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

Этот фрагмент взят из main-module.gradle и добавляет каталог ресурсов в тестовый SourceSet:

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

Для этого у меня было две директории ресурса, связанные с тестовым SourceSet главного модуля проекта:

../other-module/src/test/resources src/test/resources (относительно папки main-module, автоматически добавляемой плагином java)

Я обнаружил, что если у меня было два файла с одинаковыми именами в обоих исходных каталогах, что-то на этапе ресурсов процесса пошло не так. В результате компиляция не началась, и по этой причине в каталоге bin не было скопировано .class, где JUnit искал классы. Исключение ClassNotFoundException исчезло, просто переименовав один из двух файлов.

Ответ 10

NoClassDefFoundError действительно означает, что он не может инициализировать класс. Это не имеет ничего общего с поиском класса. Я получил эту ошибку при вызове trim() для пустой строки.

JUnit не будет показывать исключение NullPointerException. Строка не пуста при нормальной работе, потому что я выбираю строку из файла свойств, который недоступен для тестов.

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

Ответ 11

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

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

Если ни одно из решений не работает, просто удалите папку .metadata, созданную в рабочей области. Это создало бы дополнительные накладные расходы на импорт проектов и всевозможные конфигурации, которые вы выполнили, но они наверняка решают эту проблему.

Надеюсь, что это поможет.

Ответ 12

Эти шаги работали для меня.

  • Удалить содержимое локального репозитория Maven.
  • запустите mvn clean install в командной строке. (cd в каталог pom).
  • Построить проект в Eclipse.

Ответ 13

1- mvn eclipse: eclipse

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

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

Ответ 14

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

По сути, я использовал Eclipse Error Log View, определил, что вызывает проблемы во время этого усилия по очистке, перешел в исходный каталог и вручную удалил каталог <project name>/bin. Как только это закончилось, я вернулся к Eclipse и обновил (F5) мой проект, и ошибка исчезла.

Ответ 15

Проверьте, открыт ли ваш проект как проект Maven, а не только обычный Java-проект. На самом деле это не проблема, но это точно та же причина, почему вы можете пропустить это.

Ответ 16

Это также может быть вызвано "[ERROR]. В этой среде компилятор не предусмотрен. Возможно, вы работаете на JRE, а не в JDK?"

Ответ 17

Я столкнулся с той же проблемой. Я решил это, удалив внешнюю JAR-зависимость JUnit, которую я добавил загрузкой из Интернета извне. Но затем я пошел в project-> properties-> build path-> add library-> junit-> выбрал версию (ex junit4) → apply.

Это автоматически добавило зависимость. это решило мою проблему.

Ответ 18

Внесение фиктивных изменений и сохранение тестового класса может решить эту проблему. Он автоматически создаст .class

Ответ 19

Кажется, проблема компиляции. Запустите проект как тест Maven, затем Запустите как тест JUnit.

Ответ 20

Я исправил проблему, запустив обновление maven. Щелкните правой кнопкой мыши проект вашего проекта> Maven> Обновить проект

Ответ 22

Возможно, вы забыли разместить класс Основной класс и Test Case в /SRC/ тест/Java. Проверьте его один раз.