Класс тестирования JUNIT в Eclipse - java.lang.ClassNotFoundException

Я пытаюсь запустить мой тест junit (чтобы убедиться, что файл свойств загружен правильно), но Я получаю ClassNotFoundException, хотя класс есть и все необходимые библиотеки тоже есть.

Вот ошибка, которую я получаю:

Class not found ConfigurationManagerTest                                                 java.lang.ClassNotFoundException: ConfigurationManagerTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    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)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

любые идеи о том, как исправить это?

Спасибо.

Ответ 1

ConfigurationManagerTest не найден в вашем пути к классам. Убедитесь, что файл ConfigurationManagerTest.class доступен в вашем пути к классам.

Он может не существовать, если он не был успешно скомпилирован или если он создается в каталоге, который вы не сказали проекту Eclipse, должен находиться в пути к классам.

Предполагая, что вы поместили тестовые классы в отдельную папку, убедитесь, что она отображается в представлении "Проводник пакета" (а не в представлении "Навигатор" ).

В свойствах проекта "Путь сборки Java" и вкладка "Источник" вы также можете увидеть, включена ли исходная папка для построения, а также где создаются файлы .class.

Ответ 2

Есть еще одна возможность. У меня была такая же проблема только сейчас, и ни одно из решений здесь не помогло. Кроме удаления и воссоздания проекта - я не хотел его пробовать. Что помогло, было очистить проект два раза сразу один за другим! Чистота + сборка может повторяться любое количество раз - это не поможет. Только чистая + чистая, и после этого сборка идет нормально. (Eclipse 3.6). Конечно, вы должны отключить автообновление для этого.

Редактировать: Этот пост получил свой последний плюс 15.11.2017. Таким образом, проблема (и решение) остается актуальной.

Ответ 3

Другая возможная проблема - отсутствующий конструктор (это предотвратит создание вашего .class файла).

Убедитесь, что ваш .project файл имеет следующие строки

<buildSpec>
  <buildCommand>
    <name>org.eclipse.jdt.core.javabuilder</name>
    <arguments>
    </arguments>
  </buildCommand>
</buildSpec>
<natures>
  <nature>org.eclipse.jdt.core.javanature</nature>
</natures>

Ответ 4

Это случилось со мной, когда я перетаскивал тестовые классы в разные пакеты. Я просто сделал следующее

  • Сохраненный класс в текстовом редакторе.
  • Удалил класс-нарушитель из проводника проекта eclipse.
  • Восстановлен класс.

Бинго! Теперь я могу запустить тест!

Ответ 5

У меня была эта проблема, и было довольно сложно понять, что было не так. Проект имел проект зависимости с некоторой ошибкой, который остановил сборку из execute. Когда я удаляю эту проблему с зависимостями, проект был построен, как ожидалось.

Ps.: Я работаю над проектом, у которого много ошибок компиляции, потому что мы переносим приложение, которое было преобразовано из Delphi в Java, поэтому мне не нравилось компиляционная ошибка в начале, почему мне немного времени, чтобы выяснить проблему.

Ответ 6

Я перепробовал все ответы, описанные здесь, но никто не работал, но нашел эту нить, где slomek решает проблему в очень легкой манере. Просто зайдите в проект → свойства → путь сборки Java. Затем переместите Junit к вершине, ударив снизу вверх вправо. Тогда все компилируется просто отлично.

Ответ 7

проверить свойства- > путь сборки java → библиотеки. ошибок не должно быть, в моем случае были ошибки в maven. как только я поместил нужную банку в репозиторий maven, он отлично работал

Ответ 8

Я пробовал все упомянутое здесь и в других сообщениях. Некоторые из решений, которые предлагали люди:

  • Измените папку вывода для теста
  • Создайте собственный конструктор для проекта, который будет запускать тестовую компиляцию из Maven
  • Перемещение зависимостей Maven выше в списке Order and Export в пути построения проекта

Было много, гораздо больше, но тот, который я нашел для работы, был следующим: Закройте среду разработки. Удалите банки, используемые проектом, из моего локального репозитория Maven. Откройте среду IDE. Постройте проект. Запустите тест.

После нескольких часов избиения моей головы против моей клавиатуры и последующих предлагаемых решений, это сработало!

Ответ 9

что сработало для меня - это удалить runconfiguration теста. Затем щелкните правой кнопкой мыши тестовый класс и нажмите "запустить" как тест junit.

теперь он воссоздает для меня правильную конфигурацию запуска.

Ответ 10

Другой способ, которым это может разворачиваться, и только что сделал для меня, - это если у вас есть ошибка сборки, о которой Eclipse не говорит. Если скомпилировать unit test не удается, тогда нет .class файла, и вы получите ClassNotFoundException.

В моем случае отсутствовал файл сторонней стороны. Когда я запустил тест, у меня появилось всплывающее окно, в котором говорилось: "Ошибки существуют в необходимых проектах (проектах)". Я работаю с огромным проектом, и я всегда получаю это сообщение, потому что часть источника недоступна для затмения (длинная история). Также он не говорит, что такое ошибки. Поэтому я нажимаю "Продолжить", а затем получаю исключение.

Как только я понял, что происходит, было легко исправить, добавив недостающую банку в путь к классам в разделе "Run → Debug Configurations...

Я не уверен, как лучше всего обнаружить или предотвратить это, за исключением того, чтобы осознавать эту возможность, когда что-то пошло не так, и пересмотреть ваши последние изменения в отношении того, что могло бы пойти не так.

Ответ 11

Вы уверены, что ваш тестовый класс находится в папке сборки? Вы вызываете junit в отдельной JVM (fork = true), поэтому возможно, что рабочая папка будет меняться во время этого вызова и со сборкой будет относительной, что может вызвать проблему.

Запустите ant из командной строки (не из Eclipse) с помощью переключателя -verbose или -debug, чтобы просмотреть подробный путь к классам/рабочий каталог dir junit и вывести результаты назад, если вы все еще не можете решить этот вопрос.

Ответ 12

Вариант ответа Гая выше, включая дополнительных строителей. Предположим, что у вас сконфигурирован конструктор Ant:

<buildSpec>
    <buildCommand>
        <name>org.eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
        <arguments>
            <dictionary>
                <key>LaunchConfigHandle</key>
                <value>&lt;project&gt;/.externalToolBuilders/myprojectantlaunch.launch</value>
            </dictionary>
        </arguments>
    </buildCommand>
</buildSpec>

Если сборка Ant build и Eclipse имеет разные местоположения вывода, Eclipse, возможно, не сможет найти тестовый класс в пути к классам. В случае конструктора Ant также проверяйте настроенные цели для чистых, автоматических, ручных и послеочистных сборок, чтобы гарантировать, что вызывающий объект, который строит модульные тесты, вызывается.

Ответ 13

Я добавлю этот ответ в качестве своего решения, рассмотрев выше.

  • Вы просто редактируете файл .project в основной папке проекта. Используйте правильный XML-редактор, иначе вы получите fatal error из Eclipse, который не сможет открыть этот проект.
  • Я создал свой проект Java, добавив этот <nature>org.eclipse.jdt.core.javanature</nature> в <natures></natures>.
  • Затем я добавил эти строки с правильным отступом <buildCommand><name>org.eclipse.jdt.core.javabuilder</name><arguments></arguments></buildCommand> до <buildSpec></buildSpec>.
  • Run as JUnit... Успех

Ответ 14

Щелкните правой кнопкой мыши проект в проводнике: Путь сборки → Заказ и экспорт → Выберите JRE System Library [jdk] и нажмите кнопку "Нижняя".

Ответ 15

Еще один вариант.
Каким-то образом мои ранее работающие тестовые классы, похоже, работали из другого места; мои изменения не выполнялись, когда я запускал тесты.

Я обнаружил, что выходная папка для моих файлов ${project_loc} src/test/java не была тем, что я ожидал. Он был непреднамеренно установлен в ${project_loc} target/classes. Я правильно установил его в свойствах проекта, пути Java Build Path, Source.

Ответ 16

Если у вас есть проект maven, попробуйте запустить:

mvn clean compile

а затем в eclipse очистите и создайте свой проект.

Ответ 17

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

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

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

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

Ответ 18

В представлении "Проводник пакета" щелкните правой кнопкой мыши ваш тестовый класс, затем "Путь сборки" → "Включить", он должен быть в порядке.

Ответ 19

Я тоже столкнулся с тем же исключением, ни одно из решений по интернету не помогло мне. мой проект содержит несколько модулей. Мой код Junit находится в веб-модуле. И это относится к коду клиентского модуля.

Наконец, я попробовал: Правый клик по проекту (веб-модуль) → путь сборки → вкладка источника → Источник ссылки → добавлено расположение файлов src (модуль клиента)

Вот оно! Оно работало завораживающе Надеюсь, что это поможет.

Ответ 20

Я получил эту ошибку, потому что недавно создал новую рабочую область, и мои "Установленные JRE" были настроены неправильно. Убедитесь, что в Preferences -> Java -> Installed JREs выбрана корневая папка вашего JDK. По умолчанию для меня в новом рабочем пространстве была JRE по какой-то причине.

Ответ 21

Я знаю, что об этом уже давно ответили, но ответ не исправил его для меня, но я просто удалил все из источников в настройках пути сборки и повторно добавил их

Ответ 22

У меня была эта проблема, в моем случае проблема заключается в компиляции, я использую maven, а тестовые классы не компилируются.

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

Ответ 23

  • Предполагая, что вы попробовали все разумное (удалить цель, обновить, очистить, восстановить, установить maven...) и что вы поняли, что Eclipse не ведет себя разумно...
  • Теперь: проверьте, нет ли ошибок, предполагая, что это может быть плагин (любой плагин), который имеет какое-то отношение к тестам.

  • В моем случае:

    • Я удалил EclEmma.
    • Это начало работать...

Потратил несколько часов, пытаясь угадать!

Ответ 24

Убедитесь, что выходная папка на вкладке " Java Build Path " установлена так, как показано ниже, чтобы определить, где создается файл .class. Затем очистите проект.

enter image description here