2010-05-19 12 views
12

En una prueba unitaria estoy usando este código para cargar en un archivo de configuración de la prueba específica:problemas de rutas de clases utilizando JUnit tanto con Eclipse y Maven

InputStream configFile = getClass().getResourceAsStream("config.xml"); 

Cuando ejecuto la prueba a través del eclipse, se requiere la archivo xml para estar en el mismo directorio que el archivo de prueba.

Cuando construyo el proyecto con maven, requiere que el xml esté en src/test/resources, de modo que se copie en target/test-classes.

¿Cómo puedo hacer que ambos trabajen con un solo archivo?

Respuesta

15

Coloque el archivo config.xml en src/test/resources y agregue src/test/resources como carpeta de origen en Eclipse.

El otro problema es cómo funciona getResourceAsStream("config.xml") con paquetes. Si la clase que está llamando a esto está en el paquete com.mycompany.whatever, entonces getResourceAsStream también espera que config.xml esté en la misma ruta. Sin embargo, esta es la misma ruta en el classpath no en el sistema de archivos. Puede colocar el archivo en la misma estructura de directorio bajo src/test/resources - src/test/resources/com/mycompany/whatever/config.xml - o puede agregar un "/" inicial a la ruta - esto hace que getResourceAsStream cargue el archivo de la base de la ruta de clase, por lo que si lo cambia a getResourceAsStream("/config.xml") puede simplemente poner el archivo en src/test/resources/config.xml

+1

¡Eso es todo!El/era el problema. Gracias! – Steve

4

Pruebe agregar el directorio src/test/resources/ como carpeta de origen en su proyecto de Eclipse. De esta forma, debería estar en el classpath cuando Eclipse intente ejecutar su prueba unitaria.

+0

Lamentablemente, este único comentario de ahorro me llevó un día completo para encontrarlo. Resolví mi problema de pruebas que hacen que los paquetes de recursos funcionen bien en Maven, pero que fallan cuando se ejecutan en Eclipse. ¡Gracias! – davemyron

0

si lo que se necesita en el momento de prueba, puede cargarlo a través del sistema de archivos, el contexto aquí debe ser el mismo para ambos casos:

new FileInputStream(new File("target/test-classes/your.file")); 

no es bonito, pero funciona

1

Sé que esta es una pregunta antigua, pero me tropecé con ella y Me pareció extraño que ninguna de las respuestas anteriores mencione el plugin Maven Eclipse. Ejecute mvn eclipse:eclipse y agregará src/main/resources y src/test/resources y tal como la "Ruta de compilación Java" en Eclipse para usted.

Tiene un montón de cosas que se pueden configurar desde allí también (si es necesario apartarse de las convenciones, si no lo hace, entonces ya está listo para ir):

En general, si está utilizando Maven, no cambie manualmente cosas en Eclipse. Nunca comprometa su .classpath/.project y en su lugar solo use el plugin Maven Eclipse para generar esos archivos (y/o actualizarlos). De esta manera, tiene UNA fuente de configuración para su proyecto, MAVEN, y no configuraciones manuales que termina diciendo a otros que deben usar y recordarse, y así sucesivamente. Si se trata de un proyecto Maven: verifíquelo fuera del control de la fuente, ejecute "mvn eclipse: eclipse" y debería funcionar en Eclipse, si no es así, su POM debe funcionar.

Cuestiones relacionadas