it-swarm.com.ru

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

85
xybrek

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

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

85
Newtrino

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

87
slomek

Я столкнулся с той же проблемой, и я смог ее исправить, используя @ slomek's answer , но после этого проблема снова возникла. 

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

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

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

17
nhylated

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

12
johanwannheden

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

10
Berit Larsen

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

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

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

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

3
ITisha

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

  1. Проект-> Свойства-> Настройки запуска/отладки. 
  2. В разделе «Запуск конфигураций для« ..... »выберите классы/проекты 
  3. Правка -> Путь к классам -> «Восстановить записи по умолчанию»
1
Roman Romaniuk

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

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

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

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

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

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

1
David Obber

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

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

Вариант 1. Установите classpath для каждого теста

Eclipse -> Выполнить -> Выполнить конфигурации -> под JUnit-> выбрать mytest -> на вкладке classpath-> Выбрать записи пользователя-> Дополнительно-> Добавить папку -> Выбрать -> Применить-> Выполнить

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

Eclipse -> Windows -> Переменные classpath -> New -> [Имя: Junit_test_cases_cp | путь:] -> ок Затем перейдите к Eclipse-> Выполнить -> Выполнить конфигурации -> JUnit-> выбрать mytest -> на вкладке пути к классам -> Выбрать записи пользователя-> Дополнительно-> Добавить переменные пути к классам-> Выберите Junit_test_cases_cp-> ok-> Apply-> Run

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

1
user3222211

Я столкнулся с той же проблемой. Я решил удалить внешнюю зависимость jar jar, которую я добавил путем загрузки из Интернета извне. Но затем я пошел в проект-> свойства-> путь сборки-> добавить библиотеку-> junit-> выбрал версию (ex junit4) -> применить.

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

0
Agniva Dutta

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

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

0
Blake Neal

1-мвн Затмение: затмение

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

3- перезапустить

0
Toumi

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

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

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

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

0
Nayan

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

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

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

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

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

Более подробная информация здесь: https://stackoverflow.com/a/6352584/1308453https://stackoverflow.com/a/6352584/1308453

0
Philip Rego

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

0
Ben

Это также может быть связано с тем, что «[ОШИБКА] В этой среде не предусмотрен компилятор. Возможно, вы используете JRE, а не JDK?»

0
William