2008-10-29 11 views
17

Estoy escribiendo un ensayo para una clase de archivo del analizador. El método de análisis recibe un nombre de archivo como parámetro y debe abrirlo para analizarlo (duh).¿Cómo recuperar las propiedades de maven dentro de una prueba JUnit?

He escrito un archivo de prueba, que puse en el directorio de prueba/recursos dentro del directorio de mi proyecto, y me gustaría pasar este archivo para probar mi análisis. Dado que este proyecto se encuentra en CVS y será manipulado por los demás, no puedo codificar la ruta del archivo, así que pensé en uso el experto en $ {} basedir propiedad para construir el nombre del archivo en mi prueba. Algo como:

public void parseTest() { 
    ... 
    sut.parse(${basedir} + "src/test/resources/testFile"); 
    ... 
} 

¿Alguien sabe cómo podría lograr esto?

Respuesta

22

tiene 2 opciones:

1) Pase la ruta del archivo de la prueba a través de una propiedad del sistema (docs)

En su pom que podría 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> 

Entonces en su prueba puede hacer:

System.getProperty("filePath"); 

2) Coloque el archivo dentro de sr c/test/resources bajo el mismo paquete que su clase de prueba. Luego puede acceder al archivo utilizando Class.getResourceAsStream (String fileName) (docs).

Recomiendo encarecidamente la opción 2 sobre la opción 1. Pasar cosas a sus pruebas a través de las propiedades del sistema es IMO muy sucia. Combina tus pruebas innecesariamente con el corredor de prueba y te 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.

+0

Tomaré la opción 2. Pero como quiero pasar el nombre del archivo, en lugar de usar el método Class.getResourceAsStream (String fileName), estoy usando Class.getResource (String fileName) .getFile(). Gracias Mike – Alexandre

+0

Eso está bien. Solo ten en cuenta que si alguna vez tienes que ejecutar las pruebas desde un JAR (lo cual es poco probable), es posible que tengas un comportamiento extraño. –

+2

No estoy seguro de cuán completa es esta respuesta: ¿qué pasa con las propiedades de la "prueba de integración", como la dirección de base de datos local, que quizás desee almacenar en su configuración privada.xml? –

Cuestiones relacionadas