unit test run results plugin example java ant junit classpath hamcrest

java - run - show test results in jenkins



Ant+JUnit: NoClassDefFoundError (15)

Ok, estoy frustrado! He cazado por un buen número de horas y todavía estoy perplejo.

Entorno: WinXP, Eclipse Galileo 3.5 (instalación directa, sin complementos adicionales).

Por lo tanto, tengo una prueba de JUnit simple. Funciona bien desde su configuración interna de ejecución de Eclipse JUnit. Esta clase no tiene dependencias en nada. Para reducir este problema tanto como sea posible, simplemente contiene:

@Test public void testX() { assertEquals("1", new Integer(1).toString()); }

No hay sudor hasta ahora. Ahora quiero dar el paso súper avanzado de ejecutar este caso de prueba desde Ant (el objetivo final es integrarse con Hudson).

Entonces, creo un build.xml:

<project name="Test" default="basic"> <property name="default.target.dir" value="${basedir}/target" /> <property name="test.report.dir" value="${default.target.dir}/test-reports" /> <target name="basic"> <mkdir dir="${test.report.dir}" /> <junit fork="true" printSummary="true" showOutput="true"> <formatter type="plain" /> <classpath> <pathelement path="${basedir}/bin "/> </classpath> <batchtest fork="true" todir="${test.report.dir}" > <fileset dir="${basedir}/bin"> <include name="**/*Test.*" /> </fileset> </batchtest> </junit> </target> </project>

$ {basedir} es el nombre del proyecto Java en el área de trabajo que contiene la fuente, las clases y el archivo de compilación. Todos los archivos .java y build.xml están en $ {basedir} / src. Los archivos .class están en $ {basedir} / bin.

Agregué eclipse-install-dir / plugins / org.junit4_4.5.0.v20090423 / junit.jar a la ruta de acceso de Ant Runtime a través de Windows / Preferences / Ant / Runtime / Contributed Entries. ant-junit.jar está en Entradas para el hogar de hormigas.

Entonces, ¿qué sucede cuando ejecuto este objetivo increíblemente complejo? Mi archivo de informe contiene:

Testsuite: com.xyz.test.RussianTest Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec Testcase: initializationError took 0 sec Caused an ERROR org/hamcrest/SelfDescribing java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing at java.lang.ClassLoader.defineClass1(Native Method) 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 java.lang.ClassLoader.loadClassInternal(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) 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) at java.lang.ClassLoader.loadClassInternal(Unknown Source)

¿Qué es esta clase de org.hamcrest.SelfDescribing? ¿Algo que ver con las burlas? Está bien. Pero ¿por qué la dependencia? No estoy haciendo nada en absoluto con eso. Esto es literalmente un proyecto Java sin dependencias que no sea JUnit.

Perplejo (y frustrado) !!


Agregué los archivos jar de hamcrest y junit al directorio java / lib / ext y funcionó bien para mí.


Busqué en el directorio de instalación de Eclipse desde el nivel superior en busca de " hamcrest .jar" (el comodín ''*'' alrededor de hamcrest no se muestra en esta publicación web). Luego agregué el archivo jar encontrado en el classpath en Ant build.xml. Fijo.


DE ACUERDO. Finalmente trabajé alrededor de este problema. No diré "resuelto" ya que todavía estoy bastante confundido en cuanto a lo que está pasando. De todas formas...

Descargué las últimas versiones de Ant (1.7.1) y JUnit (4.6) y las coloqué en un directorio externo, NO en el área de trabajo o "en" Eclipse de ninguna manera.

Luego fui a las entradas de Windows / Preferences / Ant / Runtime / Classpath / Ant Home y eliminé todos los valores existentes (predeterminados). Los reemplacé con el contenido del directorio Ant lib recién descargado.

Luego agregué el junit.jar descargado en Entradas globales. Contiene las clases org.hamcrest, al igual que el junit.jar incluido con Eclipse, así que no sé por qué esto es necesario, pero sí lo es.

Eso es. Mi tarea junit en el archivo de compilación funciona perfectamente.


Descargué JUnit 4.7 y puse junit-4.7.jar en mi ruta de compilación (en lugar de la versión anterior). Eso lo resolvió. No toqué la hormiga.


En eclipse, esto sucede cuando agrega el tarro junit usando las Properties->Libaries->Add External JARs...

En lugar de usar Properties->Libaries->Add Library... que le permite seleccionar Junit3 or Junit4 y agrega automáticamente la biblioteca hamcrest a la ruta.


Encontré la razón para un problema idéntico, pero solo cuando se ejecuta la prueba con Ant en la línea de comandos.

Es posible que desee ejecutar Ant en modo de depuración ( ant -d ) y tener cuidado con esta declaración:

[junit] Implicitly adding /usr/share/ant/lib/junit4.jar:...

En mi caso, este JAR se agregó al final de mi ruta de clase cuando ejecuté la prueba y anulé mi referencia de JUnit en mi secuencia de comandos de Ant.

Resultó que mi instalación de Ant estaba incluida con un conjunto de librerías JUnit más antiguas. Tuve que eliminar el junit4.jar de arriba para que mi ref classpath ref tenga efecto.


Enfrentó exactamente el mismo problema en eclipse pero lo resolvió siguiendo los pasos dados

  1. Ir a Preferencias | Java | JUIT
  2. Haga clic en "Agregar paquete" y agregue "org.hamcrest. *"

Voila ... el problema se ha ido ...


JUnit 4.5 incluye Hamcrest como parte de su sistema de emparejamiento. Querrás asegurarte de tener ese archivo JAR en tu ruta de clase también


La clase que falta se incluye en junit de la versión 4.4 y en ( link ).

Compruebe si hay una versión anterior de jUnit en su ruta de clase. Intente ejecutar el script ant en un shell de comandos para ver si aparece el mismo error. Si lo hace, entonces probablemente ant use una versión jUnit anterior a 4.4.

Actualizar:

Mira la carpeta ANT_HOME. Haga clic con el botón derecho en un archivo build.xml, seleccione la segunda "compilación de Ant" en el cuadro de diálogo Ejecutar como ... Se abrirá un cuadro de diálogo para editar la configuración de ejecución ant (podría haber una forma más fácil de abrir esto). Ir a la pestaña Classpath. Agregue el junit más nuevo en el classpath (carpeta lib de ant).


No creo que sea necesario agregar el tarro JUnit a tu classpath Ant. En su lugar, compruebe que tiene la biblioteca JUnit en su ruta de compilación de Java (Windows / Preferences / Java / Build path / Classpath Variables).


Tuve el mismo problema con jUnit 4.11, Ant y Ivy. Este código funciona para mí, pero debes asegurarte de tener hamcrest-core-1.3.jar (para jUnit 4.11) en tu carpeta lib.

<property name="lib.dir">lib</property> <property name="test.dir">src/test/java</property> <property name="build.test">build/test/java</property> <path id="test.path.id"> <path location="${build.test}" /> <path refid="lib.path.id" /> </path> <path id="lib.path.id"> <fileset dir="${lib.dir}" /> </path> <!-- ================================= Runs Tests ================================= --> <target name="junit"> <junit> <classpath refid="test.path.id" /> <batchtest> <fileset dir="${test.dir}" /> </batchtest> <formatter type="plain" usefile="false" /> </junit> </target>


Tuve el mismo problema e intenté muchas formas de alterar el classpath. La solución más fácil para mí fue usar el parámetro fork = "no" en el objetivo de Junit. Parece que Eclipse puede "automágicamente" hacerlo mejor que yo ...


Tuve este problema al intentar ejecutar las pruebas junit desde Ejecutar -> Ejecutar como -> Prueba JUnit (lo verifiqué, y tengo el último complemento de junit (junit4_4.5.0) instalado).

Creé un nuevo directorio (externalJars) en el directorio principal de instalación de eclipse, descargué el más reciente junit jar (4.8.1) allí.

A continuación, desde Eclipse, con el proyecto seleccionado, modifiqué los archivos jar en la ruta de compilación (Proyecto -> Propiedades -> Ruta de compilación de Java). Cuando probé Junit por primera vez, agregué el archivo jar de junit desde la carpeta plugin / org.junit4_4.5.0.v20090824. Quité este archivo jar y agregué externalJars / junit-4.8.1.jar (el que acabo de descargar) a la ruta de compilación haciendo clic en el botón "Agregar frascos externos".

hamcrest.org es una biblioteca de "matchers". Puedes encontrar información en:

http://code.google.com/p/hamcrest/

Proporciona una biblioteca de objetos de coincidencia (también conocidos como restricciones o predicados) que permiten definir las reglas de "coincidencia" de forma declarativa, que se utilizarán en otros marcos. Los escenarios típicos incluyen marcos de prueba, bibliotecas de simulacros y reglas de validación de UI.

Hamcrest ha sido portado a Java, C ++, Objective-C, Python y PhP.

Nota: Hamcrest no es una biblioteca de prueba: simplemente sucede que los comparadores son muy útiles para la prueba.


Tuve un problema similar que superé al colocar una copia de "hamcrest-core-1.3.jar" en la carpeta / lib.


agrega también hamcrest.jar a tu classpath de prueba