Excepción de clase no encontrada al ejecutar la prueba JUnit

117

Recibo este error al ejecutar la prueba JUnit en 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)

Intenté agregar una JUnitbiblioteca en la ruta de clases aunque estoy usando maven, y la biblioteca JUnit está en la dependencia de POM.

Ya intenté limpiar el proyecto y creé un nuevo caso de prueba de JUnit usando el complemento JUnit para Eclipse, pero sigo recibiendo el mismo error.

quarks
fuente
10
intente ejecutar mvn clean testuna vez que compilará todas las clases de prueba
Jigar Joshi
1
¿Puede comprobar si com.myproject.server.MyTest está en la carpeta bin? Quiero decir, si no se compila debido a un error de compilación o ruta de construcción, obtendrá este error.
vikas
¿Estás probando una clase o todo el proyecto?
Doszi89
Posible duplicado de Eclipse - java.lang.ClassNotFoundException
Amos M. Carpenter
1
En mi caso, la ejecución de pruebas con Maven funcionó, pero si hago clic con el botón derecho en una clase de prueba y elijo Ejecutar como -> Prueba JUnit, se informa ClassNotFoundException. Lo arreglé haciendo clic con el botón derecho en el proyecto y yendo a Propiedades -> Constructores y luego moviendo Maven Project Builder sobre Java Builder
xorcus

Respuestas:

121

Esto parece ocurrir porque solo se compila el código fuente cuando lo usa mvn clean compile(estoy usando maven 3.1.0, así que no estoy seguro de si siempre se comportó así).

Si ejecuta mvn test, el código de prueba también se compilará, pero luego ejecutará las pruebas (lo que puede no ser deseable de inmediato si está intentando ejecutarlas a través de Eclipse). La forma de evitar esto es agregar test-compilea su secuencia de comandos de Maven haces a mvn clean. Por ejemplo, correría mvn clean compile test-compile.

Newtrino
fuente
1
Esto sucedió una vez y la respuesta de slomek funcionó y luego este mismo error sucedió nuevamente, así que tuve que intentarlo también. Ahora funciona bien de nuevo, por lo que, para estar seguro, es posible que desee hacer ambas cosas.
Roger
Gracias, funcionó para mí. Pero en mi caso, no funcionó hasta el cierre y reabrió el proyecto en eclipse.
Paramesh Korrakuti
En palabras simples, haga un 'mvn clean test-compile' y luego ejecute sus pruebas Junit en eclipse. Funcionó para mí. Gracias.
Sreram
103

Tuve un problema similar con mis pruebas y encontré en algún lugar de la Web que tienes que ir a Build Path en las propiedades de tu proyecto y mover Maven Dependencies por encima de JRE System Library . Eso parece haber funcionado para mí.

Slomek
fuente
1
Gracias, esto resolvió mi problema. La prueba real estaba obteniendo el error de clase no encontrada cuando intenté ejecutarla. Creo que este es probablemente un primer paso preferible antes de agregar objetivos de compilación mvn adicionales.
Roger
8
Este método se describe con capturas de pantalla en esta publicación (en caso de que los pasos no estén claros en la respuesta de @ slomek anterior)
nhylated
2
No pude mover las dependencias administradas de Maven por encima de la biblioteca del sistema JRE en Eclipse Mars 2, pero podría hacer clic con el botón derecho en el proyecto e ir a Propiedades -> Constructores y luego mover Maven Project Builder por encima de Java Builder y funcionó para mí.
xorcus
Probé todo lo anterior y no funcionó, tampoco pude mover las dependencias de Maven sobre la biblioteca del sistema JRE, pero eso estaba en la pestaña Bibliotecas. Luego fui a Build Path -> Order & Export -> ya que pude mover las Dependencias de Maven por encima de la biblioteca del sistema JRE. Luego construí el proyecto y ejecuté una instalación de Maven, luego la prueba se ejecutó correctamente.
Megan
22

Enfrenté el mismo problema y pude solucionarlo usando la respuesta de @ slomek, pero el problema resurgió después de eso.

Finalmente lo arreglé agregando la carpeta de salida de mi proyecto a la configuración de ejecución de la prueba JUnit. Los pasos son:

  • Busque la carpeta de salida de su proyecto en Project properties -> Java Build Path -> Default output folder
    • Normalmente esto es <project-folder>/bin
  • Ir Run -> Run Configurations...
  • Haga clic en la configuración de ejecución de la prueba unitaria y haga clic en la Classpathpestaña
  • Agregue explícitamente la carpeta de salida de su proyecto debajo User Entries, incluso si el proyecto ya está incluido allí
    • Haga clic en Advanced -> Add folderpara agregar la carpeta de salida

Este problema puede deberse a una configuración extraña del proyecto en Eclipse, por ejemplo, carpeta de origen con proyectos maven anidados importados como un solo proyecto / carpeta (al menos así fue como se configuró mi proyecto).

nhylated
fuente
Muchas gracias; Tuve este problema. Tu solución funcionó para mí; los dos primeros no lo hicieron. Votado a favor.
davtom
¡Absolutamente brillante! He estado rascándome la cabeza durante años por esto. ¡Gracias!
RayCh
17

Si este problema ocurre solo en Eclipse, ejecutar el comando Proyecto -> Limpiar ... en el proyecto seleccionado puede ayudar.

johanwannheden
fuente
Gracias - en realidad funcionó para mí - JAVE EE eclipse gradlew
Abdeali Chandanwala
11

Después de haber probado todo aquí sin mejorar, resolví mi problema reiniciando Eclipse

Berit Larsen
fuente
5

Solucioné mi problema ejecutando maven update. Haga clic derecho en proyectar su proyecto> Maven> Actualizar proyecto

Azianese
fuente
3

En mi caso, tenía una estructura de directorio maven incorrecta.

Que debería ser como:

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

Después de que arreglé eso, todo funcionó a la perfección.

ITisha
fuente
2

En mi caso, solo los siguientes pasos me ayudaron a resolver este problema:

  1. Proyecto-> propiedades-> Configuración de ejecución / depuración.
  2. En "Configuración de lanzamiento para '.....'", seleccione clases / proyectos
  3. Editar -> Classpath -> "Restaurar entradas predeterminadas"
Roman Romaniuk
fuente
¡¡Gracias!! ¡¡Solo este me ayudó !!
sumandas
1

Anteriormente, en este caso, siempre hice mvn eclipse:eclipsey reinicié mi Eclipse y funcionó. Después de migrar a GIT, dejó de funcionar para mí, lo cual es algo extraño.

El problema básico aquí es que el Sr. Eclipse no encuentra la clase compilada. Luego, configuré la carpeta de salida como Project / target / test-classes que se genera de forma predeterminada mvn clean installsin omitir la prueba y procedí con la siguiente solución alternativa:

Opción 1: establecer classpath para cada caso de prueba

Eclipse -> Ejecutar -> Ejecutar configuraciones -> en JUnit-> seleccionar mytest -> en la pestaña classpath-> Seleccionar entradas de usuario-> Avanzado-> Agregar carpeta -> Seleccionar -> Aplicar-> Ejecutar

Opción 2: crear la variable classpath e incluirla en classpath para todos los casos de prueba

Eclipse -> Windows -> Variables de classpath -> Nuevo -> [Nombre: Junit_test_cases_cp | ruta:] -> ok Luego vaya a Eclipse-> Ejecutar -> Ejecutar configuraciones -> JUnit-> seleccione mytest -> en la pestaña classpath -> Seleccione Entradas de usuario-> Avanzado-> Agregar variables de classpath-> Seleccione Junit_test_cases_cp-> ok- > Aplicar-> Ejecutar

Esto es lo único que me funciona actualmente después de probar todas las sugerencias en línea.

user3222211
fuente
1

Tuve el mismo problema con un proyecto de Gradle con un SourceSet de prueba con dos directorios de recursos.

Este fragmento proviene de main-module.gradle y agrega un directorio de recursos al SourceSet de prueba:

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

Al hacer esto, tenía dos directorios de recursos relacionados con el SourceSet de prueba del módulo principal del proyecto:

../other-module/src/test/resources src / test / resources (relativo a la carpeta del módulo principal, agregado automáticamente por el complemento de Java)

Descubrí que si tenía dos archivos con el mismo nombre en ambos directorios de origen, algo en la etapa de recursos del proceso salió mal. Como resultado, no se inició ninguna compilación y por esta razón no se copió ningún .class en el directorio bin, donde JUnit estaba buscando las clases. La ClassNotFoundException desapareció simplemente cambiando el nombre de uno de los dos archivos.

David Obber
fuente
1

NoClassDefFoundError realmente significa que no puede iniciar la clase. No tiene nada que ver con encontrar la clase. Recibí este error al llamar a trim () en una cadena nula.

JUnit no mostrará NullPointerException. La cadena no es nula cuando se ejecuta normalmente porque estoy obteniendo la cadena de un archivo de propiedades que no está disponible para pruebas.

Mi consejo es que elimines las piezas de la clase hasta que tus pruebas empiecen a aprobar. Entonces puede determinar qué línea está dando el error.

Philip Rego
fuente
0

Tuve un problema similar con mi Eclipse Helios que depuraba Junits. Mi problema fue un poco diferente, ya que pude ejecutar Junits con éxito, pero cuando recibía ClassNotFoundException mientras depuraba los mismos JUNIT.

He probado todo tipo de soluciones diferentes disponibles en Stackoverflow.com y foros en otros lugares, pero nada parece funcionar. Después de golpearme la cabeza con este problema durante casi dos días, finalmente descubrí la solución.

Si ninguna de las soluciones parece funcionar, simplemente elimine la carpeta .metadata creada en su espacio de trabajo. Esto crearía una sobrecarga adicional de importar los proyectos y todo tipo de configuración que haya realizado, pero esto seguramente resolverá este problema.

Espero que esto ayude.

Nayan
fuente
Como nota ... hacer esto requerirá que reconstruya su entorno. Entonces, si bien puede ser una solución, solo tenga en cuenta lo que está a punto de hacer ...
Bob
0

Estos pasos funcionaron para mí.

  • Elimina el contenido del repositorio local de Maven.
  • ejecutar mvn clean install en la línea de comandos. (cd al directorio pom).
  • Construir proyecto en Eclipse.
Jake Graham Arnold
fuente
0

1- mvn eclipse: eclipse

2- proyecto limpiar todos los proyectos

3- reiniciar

Toumi
fuente
0

Vale la pena mencionar como otra respuesta que si está usando eGit, y su classpath se actualiza debido a, por ejemplo, una herramienta de cobertura de prueba como Clover, a veces hay un problema de limpieza que no elimina por completo el contenido de /path/to/git/repository/<project name>/bin/

Básicamente, utilicé la Vista de registro de errores de Eclipse, identifiqué qué estaba causando problemas durante este esfuerzo de limpieza, navegué al directorio de origen y eliminé manualmente el <project name>/bindirectorio. Una vez que terminó, volví a Eclipse y actualicé ( F5) mi proyecto y el error desapareció.

Blake Neal
fuente
0

Compruebe si su proyecto se abre como un proyecto de Maven y no solo como un proyecto Java normal. En realidad, es una obviedad, pero esa es exactamente la misma razón por la que podría perderse.

Ben
fuente
0

También puede deberse a "[ERROR] No se proporciona un compilador en este entorno. ¿Quizás está ejecutando un JRE en lugar de un JDK?"

Guillermo
fuente
0

Me había enfrentado al mismo problema. Lo resolví eliminando la dependencia del jar externo de JUnit que agregué mediante la descarga de Internet externamente. Pero luego fui a proyecto-> propiedades-> ruta de compilación-> agregar biblioteca-> junit-> elegí la versión (ex junit4) -> aplicar.

Añadió automáticamente la dependencia. resolvió mi problema.

Agniva Dutta
fuente
0

Hacer un cambio ficticio y guardar la clase de prueba puede resolver el problema. Construirá el .class automáticamente

Lorenzo Lerate
fuente
0

Parece un problema de compilación. Ejecute el proyecto como prueba Maven, luego Ejecutar como prueba JUnit.

Yao Li
fuente
0

Por favor, compruebe si ha agregado junit4 como dependencia.

p.ej

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
Ishan Liyanage
fuente
-5

Puede que hayas olvidado colocar la clase Main y la clase Test Case en / src / test / java. Compruébalo una vez.

Sathya
fuente
1
java.lang.ClassNotFoundException se produce cuando la clase ya está compilada pero en tiempo de ejecución debido a que classpath no está configurada correctamente.
Nitin Mahesh