Configurando hormiga para ejecutar pruebas unitarias. ¿Dónde deberían estar las bibliotecas? ¿Cómo debe configurarse classpath? evitando ZipException

votos
19

Estoy tratando de ejecutar mis pruebas junit usando hormiga. Las pruebas se inician utilizando un conjunto de pruebas JUnit 4. Si ejecuto esto directamente desde Eclipse, las pruebas se completan sin error. Sin embargo, si lo ejecuto desde la hormiga, muchas de las pruebas fallan y este error se repite una y otra vez hasta que falla la tarea junit.

    [junit] java.util.zip.ZipException: error al abrir el archivo zip
    [junit] en java.util.zip.ZipFile.open (Método nativo)
    [junit] en java.util.zip.ZipFile. (ZipFile.java:114)
    [junit] en java.util.zip.ZipFile. (ZipFile.java:131)
    [junit] en org.apache.tools.ant.AntClassLoader.getResourceURL (AntClassLoader.java:1028)
    [junit] en org.apache.tools.ant.AntClassLoader $ ResourceEnumeration.findNextResource (AntClassLoader.java:147)
    [junit] en org.apache.tools.ant.AntClassLoader $ ResourceEnumeration.nextElement (AntClassLoader.java:130)
    [junit] en org.apache.tools.ant.util.CollectionUtils $ CompoundEnumeration.nextElement (CollectionUtils.java:198)
    [junit] en sun.misc.CompoundEnumeration.nextElement (CompoundEnumeration.java:43)
    [junit] en org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.checkForkedPath (JUnitTask.java:1128)
    [junit] en org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeAsForked (JUnitTask.java:1013)
    [junit] en org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute (JUnitTask.java:834)
    [junit] en org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue (JUnitTask.java:1785)
    [junit] en org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute (JUnitTask.java:785)
    [junit] en org.apache.tools.ant.UnknownElement.execute (UnknownElement.java:288)
    [junit] en sun.reflect.GeneratedMethodAccessor1.invoke (Fuente desconocida)
    [junit] en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
    [junit] en java.lang.reflect.Method.invoke (Method.java:597)
    [junit] en org.apache.tools.ant.dispatch.DispatchUtils.execute (DispatchUtils.java:106)
    [junit] en org.apache.tools.ant.Task.perform (Task.java:348)
    [junit] en org.apache.tools.ant.Target.execute (Target.java:357)
    [junit] en org.apache.tools.ant.Target.performTasks (Target.java:385)
    [junit] en org.apache.tools.ant.Project.executeSortedTargets (Project.java:1337)
    [junit] en org.apache.tools.ant.Project.executeTarget (Project.java:1306)
    [junit] en org.apache.tools.ant.helper.DefaultExecutor.executeTargets (DefaultExecutor.java:41)
    [junit] en org.apache.tools.ant.Project.executeTargets (Project.java:1189)
    [junit] en org.apache.tools.ant.Main.runBuild (Main.java:758)
    [junit] en org.apache.tools.ant.Main.startAnt (Main.java:217)
    [junit] en org.apache.tools.ant.launch.Launcher.run (Launcher.java:257)
    [junit] en org.apache.tools.ant.launch.Launcher.main (Launcher.java:104)

mi tarea de ejecución de prueba es la siguiente:

    <target name = run-junit-tests depends = compile-tests, clean-results>
        <mkdir dir = $ {test.results.dir} />
        <junit failureproperty = tests.failed fork = true showoutput = yes includeantruntime = false>
            <classpath refid = test.run.path />
            <formateador type = xml />
            <test name = project.AllTests todir = $ {basedir} / test-results />
        </ junit>
        <fail if = tests.failed message = Pruebas unitarias fallidas />
    </ target>

Verifiqué que el classpath contiene lo siguiente así como también todos los códigos y bibliotecas del programa:

ant-junit.jar
ant-launcher.jar
ant.jar
easymock.jar
easymockclassextension.jar
junit-4.4.jar

He intentado depurar para averiguar qué ZipFile está intentando abrir sin suerte, he intentado cambiar includeantruntime y fork y he intentado ejecutar horm con ant -lib test / libs donde test / libs contiene la hormiga y junit bibliotecas.

Se agradece cualquier información sobre las causas de esta excepción o cómo se configuró para ejecutar exitosamente pruebas unitarias.

ant 1.7.1 (ubuntu), java 1.6.0_10, junit 4.4

Gracias.

Actualización: solucionado Encontrado mi problema. Había incluido mi directorio de clases en mi ruta utilizando un conjunto de archivos en lugar de un pathelement. Esto causaba que los archivos .class se abrieran como archivos ZipFiles, lo que por supuesto arrojó una excepción.

Publicado el 20/01/2009 a las 13:07
por usuario
En otros idiomas...                            


5 respuestas

votos
2

Parece que hay un problema con los caminos.

Verifique la siguiente fuente de error:

  • classpath: imprime la variable classpath en una prueba junit, ejecútala desde eclipse y ant, para que puedas compararlas
  • Verifica tu proyecto por rutas absolutas. Probablemente, ant utiliza otros prefijos de ruta que eclipse.

Un poco más de información ayudaría a ayudar :)

¡Buena suerte!

Respondida el 20/01/2009 a las 13:23
fuente por usuario

votos
15

Encontrado mi problema Había incluido mi directorio de clases en mi ruta utilizando un conjunto de archivos en lugar de un pathelement. Esto causaba que los archivos .class se abrieran como archivos ZipFiles, lo que por supuesto arrojó una excepción.

Respondida el 20/01/2009 a las 14:30
fuente por usuario

votos
0

Gracias a todos por esta información. Sólo quiero añadir un poco de la punta de mi experiencia. Tengo el mismo problema con JUnit como usted cuando tryes junit licencia para abrir archivos * .txt en la carpeta lib donde reside * .jar. (Proceso de determinación de la hiedra los pone aquí) Así

<path id="lib.path.id">
    <fileset dir="${lib.dir}" includes="**.jar"/>
</path>

ayuda también.

Respondida el 29/04/2010 a las 23:01
fuente por usuario

votos
9

Este error es causado específicamente por la ruta de clase contiene referencias explícitas a uno o más archivos [] que no son de JAR. La referencia a un "error al abrir archivo zip" es por supuesto que un JAR es en efecto un archivo ZIP donde como otros archivos [Junit] ha encontrado como archivos de clase son no y, como tal, no tienen un formato zip. Por lo que la ruta de clase debe contener sólo las referencias explícitas a JAR [archivos] y / o los nombres de los directorios [] donde otros recursos como archivos de clase se encuentran.

Por eso, cuando la creación de su ruta de clase (en ANT) utilizar:

<path id="proj.class.path">
    <pathelement location="c:/my/project/root" />       :one for each of the [directories] where class files, log4j property files and other resources etc are to be found
    <fileset refid="my.file.set">                   :to describe all the explicit JAR [files] that need to be on the class path.
</path>

dónde

<fileset id="my.file.set" dir="c:/where/i/keep/my/jars">
    <filename name="myjar1.jar" />
    <filename name="myjar2.jar" />
    <filename name="myjar3.jar" />
</fileset>

o

NOTA: Al utilizar comodines como [**/*]en lo necesario para hacer que los archivos de que la tarjeta no coincide salvaje que no son archivos JAR

<fileset id="my.file.set" dir="c:/where/i/keep/my/jars">
    <include name="**/*.jar" />
</fileset>
Respondida el 30/05/2010 a las 08:19
fuente por usuario

votos
0

Si está usando Ubuntu o Debian, esto hará que JUnit (y algunas otras librerías) siempre está disponible para la hormiga:

sudo apt-get install ant-optional
Respondida el 17/12/2011 a las 23:18
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more