Java.lang.NoClassDefFoundError en junit


Estoy recibiendo este error en java en mi código de prueba junit. Busqué en la red y dice que tengo que añadir el junit.jarra en el classpath.

En Eclipse lo he añadido en el classpath de las Propiedades del proyecto de windows, pero todavía tengo error de inicialización. ¿Qué debo 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
Author: Chris Dennett, 2010-11-19

14 answers

  1. Haga clic con el botón derecho del ratón en el explorador de paquetes > haga clic en Propiedades
  2. vaya a la pestaña Java Build Path > Libraries
  3. haga clic en el botón' Agregar biblioteca '
  4. seleccione JUnit
  5. haga clic en Siguiente.

Usted debe ser capaz de manejar desde allí.

 88
Author: Chris Dennett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-23 22:43:34
  1. Eclipse - > Menú superior -> Ejecutar - > Ejecutar configuraciones
  2. Elimine todas las ocurrencias de su prueba. Su prueba puede aparecer como su prueba.Method_1 (). Eliminar eso.
  3. Vuelva a ejecutar. Deje que Eclipse construya una nueva configuración.

Anexo: Localmente he creado una" Biblioteca de usuarios " y agregado a mis proyectos que tiene

hamcrest-core-1.3.jar

junit-4.12.jar

 15
Author: deepSymmetry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-06 21:04:07

El mismo problema puede ocurrir si ha descargado JUnit jar desde el sitio web de JUnit, pero se olvidó de descargar el jar Hamcrest - ambos son necesarios (las instrucciones dicen que descargue ambos, pero me salté por delante! Oops)

 11
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-25 23:53:20

Cuando se usa en Maven, actualice artifact junit:junit de 4.8.2 a 4.11.

 8
Author: Tires,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-13 18:00:15

La clase org/hamcrest/SelfDescribing no está en el classpath en tiempo de ejecución.

 2
Author: Thorbjørn Ravn Andersen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 19:35:43

Prueba 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í.

 1
Author: Amit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-11 09:26:27

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

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

A:

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

Y eso es todo. de esta manera, solo estoy cargando todos los archivos con el contexto pattern* -.xml en mi ruta de prueba.

 1
Author: Defrag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-20 06:10:36
  1. Asegúrese de que la variable de entorno JUNIT_HOME esté establecida en c:\JUNIT.
  2. luego En ejecutar configuración > seleccionar classpath > agregar tarros externos junit-4.11.jar
 1
Author: AnandSonake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-06 13:06:08

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

  1. seleccione proyecto - > buildpath - > añadir bibliotecas y seleccione junit (contiene tanto junit como hamcrest-core)
  2. descarga hamcrest-core desde maven repo y añade esto a tu classpath.
 1
Author: rishabhdaim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-26 04:54:13

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

  1. Asegúrese de tener JUnit 4 referenciado solo una vez en su proyecto (También eliminé la naturaleza Maven, pero no estoy seguro de si este paso tiene alguna influencia en la resolución de la problema).
  2. Haga clic con el botón derecho en el archivo que contiene las pruebas unitarias, seleccionar Propiedades, y en la configuración Ejecutar/Depurar, elimine cualquier entrada desde las Configuraciones de lanzamiento para ese archivo. Pulsa Aplicar y cerrar.
  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 involucrando a JUnit de las Configuraciones de Lanzamiento. Pulsa Aplicar y cerrar.
  4. Limpie el proyecto y ejecute 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).

 1
Author: marcor92,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-21 16:17:09

En Eclipse pude resolver el problema anterior siguiendo los siguientes pasos:

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

Luego Seleccione Aplicar - > Ejecutar

 1
Author: Sana Jahan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-29 11:00:03

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

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

 0
Author: Ujjwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-31 11:24:31

Incluso Junit4.11.jar no tiene el corazón de Hamcrest.frasco. He añadido explícitamente en el classpath y el problema se resolvió.

 0
Author: Rohit Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-24 20:42:50

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. A continuación, haga clic en el botón reproducir. Tu programa debería aparecer.

Si no lo hace, presione ctrl+alt+O y luego presione el botón reproducir nuevamente.

 -1
Author: Bin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-11 14:37:07