¿Cómo recuperar las propiedades de Maven dentro de una prueba JUnit?
Pregunta
Estoy escribiendo una prueba para una clase de analizador de archivos. El método de análisis recibe un nombre de archivo como parámetro y debe abrirlo para analizarlo (duh).
He escrito un archivo de prueba, que puse en el directorio test / resources dentro de mi directorio de proyecto, y me gustaría pasar este archivo para probar mi análisis. Dado que este proyecto está en CVS y será manipulado por otros, no puedo codificar la ruta del archivo, por lo que pensé en usar la propiedad maven $ {basedir} para construir el nombre del archivo en mi prueba. Algo así como:
public void parseTest() {
...
sut.parse( ${basedir} + "src/test/resources/testFile" );
...
}
¿Alguien sabe cómo podría lograr esto?
Solución
Tienes 2 opciones:
1) Pase la ruta del archivo a su prueba a través de una propiedad del sistema ( documentos )
En tu pom puedes hacer algo como:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<systemProperties>
<property>
<name>filePath</name>
<value>/path/to/the/file</value>
</property>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
Luego, en su prueba, puede hacer:
System.getProperty("filePath");
2) Coloque el archivo dentro de src / test / resources en el mismo paquete que su clase de prueba. Luego puede acceder al archivo usando Class.getResourceAsStream (String fileName) ( documentos ).
Recomiendo encarecidamente la opción 2 sobre la opción 1. Pasar cosas a las pruebas a través de las propiedades del sistema es muy sucio. Acopla sus pruebas innecesariamente al corredor de pruebas y causará dolores de cabeza en el futuro. Cargar el archivo fuera del classpath es el camino a seguir y es por eso que Maven tiene el concepto de un directorio de recursos.