java.lang.NoClassDefFoundError en junit

82

Recibo este error en java en mi código de prueba junit. Miré hacia arriba en la red y dice que necesito agregar junit.jar en el classpath.

En Eclipse, lo agregué en la ruta de clase de las ventanas de Propiedades del proyecto, pero todavía obtengo un error de inicialización. Qué tengo que hacer..?

Este es el rastro completo del error:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
    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)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 25 more
Chris Dennett
fuente
1
¿Qué clase falta según el error?
BalusC

Respuestas:

105
  1. Haga clic con el botón derecho en su proyecto en el Explorador de paquetes> haga clic en Propiedades
  2. vaya a Java Build Path> pestaña Bibliotecas
  3. haga clic en el botón 'Agregar biblioteca'
  4. seleccione JUnit
  5. haga clic en Siguiente.
  6. seleccione en el botón desplegable JUnit4 u otras versiones nuevas.
  7. haga clic en finalizar.
  8. Entonces OK.
Chris Dennett
fuente
Hacer esto agrega JUNIT en la biblioteca, pero ahora dice que junit.org no se puede resolver
5
Simplemente verifique que tenga la biblioteca Hamcrest también en la ruta de clases. La versión actual de JUnit 4 debería ser completamente inclusiva, pero a veces la gente divide los paquetes.
Berin Loritsch
¿Cómo procedo si estoy usando la línea de comandos de Linux? ¿Dónde agrego este frasco?
vipin8169
Los pasos anteriores funcionan bien y están tomando jar de la carpeta del complemento de eclipse. Pero si agregamos el archivo junit jar en la ruta de construcción de configuración como jar externo, debería funcionar, ¿verdad? no estaba funcionando para mí
Vineeth Bhaskaran
20
  1. Eclipse -> Menú superior -> Ejecutar -> Ejecutar configuraciones
  2. Elimine todas las apariciones de su prueba. Su prueba puede aparecer como YourTest.Method_1 (). Elimina eso también.
  3. Repetición. Deje que Eclipse cree una nueva configuración.

Anexo: A nivel local, he creado una "Biblioteca de usuarios" y la he agregado a mis proyectos que

hamcrest-core-1.3.jar

junit-4.12.jar

deepSymmetry
fuente
11

El mismo problema puede ocurrir si ha descargado JUnit jar del sitio web de JUnit, pero olvidó descargar el Hamcrest jar; ambos son obligatorios (las instrucciones dicen que descargue ambos, ¡pero salteé! ¡Ups!

Alex
fuente
10

Cuando lo utilice en Maven, actualice artifact junit: junit de, por ejemplo, 4.8.2 a 4.11.

Llantas
fuente
1
Esto arregló un NoClassDefFoundError: org/junit... caused by ClassNotFoundException: org.junit.runners.model.InitializationErrorpara mí. Estaba usando Junit 4.8. Pasar a 4.11 funcionó.
Alex
6

En Eclipse pude resolver el problema anterior siguiendo los pasos a continuación:

Haga clic con el botón derecho en el archivo de prueba que desea ejecutar, seleccione Ejecutar como -> Ejecutar configuraciones -> Seleccionar pestaña Classpath -> Seleccione las entradas de arranque -> Seleccione Avanzado -> Seleccione Agregar biblioteca -> Seleccione JUnit -> Siguiente -> Seleccione JUnit4 en el menú desplegable -> Finalizar

Luego seleccione Aplicar -> Ejecutar

Sana Jahan
fuente
2

La clase org / hamcrest / SelfDescribing no está en la ruta de clases en tiempo de ejecución.

Thorbjørn Ravn Andersen
fuente
2

Estos pasos funcionaron para mí cuando el error mostró que faltaba la clase Filter (como se informa en esta pregunta falsa duplicada : JUnit: NoClassDefFoundError: org / junit / runner / manipulation / Filter ):

  1. Asegúrese de hacer referencia a JUnit 4 solo una vez en su proyecto (también eliminé la naturaleza de Maven, pero no estoy seguro de si este paso tiene alguna influencia en la solución del problema) .
  2. Haga clic con el botón derecho en el archivo que contiene las pruebas unitarias, seleccione Propiedades y, en la configuración Ejecutar / Depurar, elimine cualquier entrada de las Configuraciones de inicio para ese archivo. Presiona Aplicar y cierra.
  3. Haga clic con el botón derecho en el proyecto que contiene las pruebas unitarias, seleccione Propiedades y, en la configuración Ejecutar / Depurar, elimine cualquier entrada que involucre a JUnit de las Configuraciones de inicio. Presiona Aplicar y cierra.
  4. Limpia el proyecto y ejecuta la prueba.

Gracias a estas respuestas por darme la pista para esta solución: https://stackoverflow.com/a/34067333/5538923 y https://stackoverflow.com/a/39987979/5538923 ).

marcor92
fuente
1

Pruebe los siguientes pasos:

  1. Vaya a la configuración de ejecución de su proyecto. En la pestaña Classpath agregue la biblioteca JUnit.
  2. Vuelva a intentar los mismos pasos.

Funcionó para mí.

Amit
fuente
1

Tuve el mismo problema, el problema estaba en el @ContextConfiguration en mis clases de prueba, también estaba cargando el contexto del servlet, simplemente cambio:

@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })

a:

@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })

y eso es. de esta manera solo estoy cargando todos los archivos con el patrón * -context.xml en mi ruta de prueba.

Desfragmentar
fuente
1
  1. Asegúrese de que la variable de entorno JUNIT_HOME esté establecida en c: \ JUNIT.
  2. luego en la configuración de ejecución> seleccione classpath> agregar jarras externas junit-4.11.jar
AnandSonake
fuente
1

La razón de esto es que el jar "hamcrest-core" no está en classpath ya que no viene directamente con junit jar. Entonces, hay dos formas de resolver esto:

  1. seleccione proyecto -> buildpath -> agregue bibliotecas y seleccione junit (contiene junit y hamcrest-core)
  2. descargue hamcrest-core desde maven repo y agréguelo a su classpath.
rishabhdaim
fuente
1

Añadiendo mis dos centavos a otras respuestas.

Compruebe si no ha creado por casualidad su clase de prueba en src/main/javalugar de lo habitual src/test/java. El primero es el predeterminado en Eclipse cuando crea una nueva clase de prueba por cualquier motivo y puede pasarse por alto. Puede ser tan simple como eso.

mal obispo
fuente
1

En mi caso, agregué mis bibliotecas a Modulepath en lugar de Classpath.

Solo funciona si JUnit se agrega correctamente a Classpath.

ingrese la descripción de la imagen aquí

Daniel Cheung
fuente
0

Este error también se produce si hay 2 versiones de hamcrest-library o hamcrest-core en el classpath.

En el archivo pom, puede excluir la versión adicional y funciona.

Ujjwal
fuente
0

incluso Junit4.11.jar no tiene hamcrest-core.jar. Agregué explícitamente en la ruta de clase y el problema se resolvió.

Rohit Sharma
fuente
-1

Si tiene más de una versión de java, puede interferir con su programa.

Le sugiero que descargue JCreator.

Cuando lo haga, haga clic en configurar, opciones y perfiles JDK. Elimine las versiones antiguas de Java de la lista. Luego haga clic en el botón de reproducción. Su programa debería aparecer.

Si no es así, presione ctrl + alt + O y luego presione el botón de reproducción nuevamente.

Compartimiento
fuente