2011-02-09 19 views
24

En mis pruebas unitarias quiero crear un directorio tmp dentro del $ {project.build.directory}. ¿Cómo puedo acceder al valor de $ {project.build.directory} dentro de mi prueba unitaria?

Una forma, en la que podría pensar, es proporcionar un archivo de propiedades filtrado en los recursos de prueba, que conserva ese valor. (No lo he intentado todavía, pero creo que debería funcionar.)

¿Hay una forma directa de acceder/pasar el valor de esta propiedad?

Saludos, Florian

+0

Probablemente podríamos configurar para configurar una propiedad del sistema, pero de alguna manera no me gusta la idea de pasar cosas a través de las propiedades del sistema. Por otro lado, se podría decir que esto es algo específico del entorno (la ruta absoluta al menos). ¿Qué piensas? – Puce

Respuesta

5

Recuerde, que sus pruebas unitarias no tienen que ser ejecutados desde Maven plugin de éxito seguro, por lo ${project.build.directory} propiedad no podría estar disponible. Para que sus pruebas sean más portátiles, preferiría recomendar el uso de File.createTempFile().

+2

Bueno, de hecho, eso es lo que hacemos actualmente y quiero cambiar eso. Tuvimos un problema que el directorio tmp en Hudson se llenó hasta que nos quedamos sin espacio en disco. Estamos investigando varias opciones, una es pasar un directorio tmp dentro del directorio de destino como un argumento para File.createTempFile(). De esta manera, "mvn clean" limpiaría todo. – Puce

+0

Además, como este es un proyecto de Maven, creo que las pruebas solo se ejecutarán usando maven o un IDE que sea compatible con Maven (aquí: Eclipse). – Puce

12

Creo que usar las propiedades del sistema es bastante sencillo si configuras el plugin surefire como se explica aquí http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html. Incluso el ejemplo que está respondiendo a su pregunta directamente:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.9</version> 
     <configuration> 
      <systemPropertyVariables> 
      <propertyName>propertyValue</propertyName> 
      <buildDirectory>${project.build.directory}</buildDirectory> 
      [...] 
      </systemPropertyVariables> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 
14

He utilizado algo así con cierto éxito antes. La prueba unitaria seguirá ejecutándose, incluso si no se utiliza Maven, el directorio de destino seguirá creando dos directorios en relación con el sitio donde se ejecutan las pruebas.

public File targetDir(){ 
    String relPath = getClass().getProtectionDomain().getCodeSource().getLocation().getFile(); 
    File targetDir = new File(relPath+"../../target"); 
    if(!targetDir.exists()) { 
    targetDir.mkdir(); 
    } 
    return targetDir; 
} 
+1

Excelente para mí en maven y eclipse. –

+0

Un poco tarde para la discusión, pero 'relPath' no es igual a' src/main/java', así que seguramente debe resolver el objetivo con '../../../ target'? – Adam

Cuestiones relacionadas