2010-05-26 13 views
9

¿Cómo puedo hacer que el manifiesto esté disponible durante una prueba unitaria Maven/Surefire ejecute "prueba mvn"?¿Cómo puedo hacer que el manifiesto esté disponible durante una prueba unitaria Maven/Surefire ejecute la "prueba mvn"?

Tengo un proyecto de código abierto que estoy convirtiendo de Ant a Maven, incluidas sus pruebas unitarias. Aquí está el repositorio fuente del proyecto con el proyecto Maven: http://github.com/znerd/logdoc

Mi pregunta se refiere al módulo principal, llamado "base". Este módulo tiene una prueba de unidad que prueba el comportamiento del método estático getVersion() en la clase org.znerd.logdoc.Library. Este método devuelve:

Library.class.getPackage().getImplementationVersion() 

getImplementationVersion() El método devuelve un valor de un ajuste en el archivo de manifiesto. Hasta aquí todo bien. He probado esto en el pasado y funciona bien, siempre y cuando el manifiesto esté realmente disponible en el classpath en la ruta META-INF/MANIFEST.MF (ya sea en el sistema de archivos o dentro de un archivo JAR).

Ahora mi reto es que el archivo de manifiesto no está disponible cuando corro las pruebas unitarias:

mvn test 

éxito seguro ejecuta las pruebas de unidad, pero mi unidad de prueba falla con un mesage que indica que Library.getVersion() regresaron null.

Cuando quiero verificar el JAR, me parece que ni siquiera se ha generado. Maven/Surefire ejecuta las pruebas unitarias contra las clases, antes de los recursos se agregan al classpath.

Investigaciones adicionales muestran que Surefire genera su propio archivo JAR en un directorio temporal, p.

/private/var/folders/TR/TREvj1wIHYyAcUy-xmc3UU+++TI/-Tmp-/surefirebooter7448562488934426857.jar 

Y luego utiliza este JAR para cargar la clase de la Biblioteca. Este JAR no contiene los recursos que bloqueé en src/main/resources. Entonces, poner un archivo META-INF/MANIFEST.MF tampoco funciona.

Entonces, ¿cómo le digo a Surefire que tenga mi archivo META-INF/MANIFEST.MF disponible del mismo cargador de clase que la clase Library?

Tenga en cuenta que utilizo Maven 2.2.0, Java 1.6.0_17 en Mac OS X 10.6.2, con JUnit 4.8.1.

Respuesta

2

Bueno, como usted ha señalado, el problema es que se genera la MANIFEST.MF durante package y directamente incluidos en el frasco final y todo esto ocurre después test. Así que supongo que tendrá que o bien:

  • proporcionan your own MANIFEST.MF (que estaría disponible en target/classes antes de ser fusionado durante package). No sé si esta es una opción (y si funcionará).
  • ejecute y ejecute su prueba desde otro módulo, según el JAR.
+0

Pascal, muchas gracias por la respuesta.Intenté ambos: Cuando agrego un archivo src/main/resources/META-INF/MANIFEST.MF y ejecuto mvn clean test, el archivo se copia a target/classes/META-INF/MANIFEST.MF, pero aparentemente todavía no es accesible para la prueba unitaria. Cuando dependo del JAR de otro módulo dentro del mismo proyecto, entonces no se usa el JAR, sino el directorio de clases generado. Creé issue report SUREFIRE-620 para esto. –

+0

@Ernst Bueno, no ayudé, pero eres bienvenido :) Tenía una gran duda sobre la primera solución, pero parece que tenía demasiada confianza para la segunda. Gracias por publicar el número de Jira, es un caso interesante. –

+0

Investigué un poco más y actualicé la pregunta. Voy a hacer un poco más de búsqueda. Tal vez funcione una clase de instrucción "find-additional-class-path-here". –

Cuestiones relacionadas