2011-02-09 11 views
24

Nei test delle mie unità, voglio creare una directory tmp all'interno di $ {project.build.directory}. Come posso accedere al valore di $ {project.build.directory} all'interno del mio test unitario?

Un modo, che potrei pensare, è quello di fornire un file di proprietà filtrato nelle risorse del test, che contiene quel valore. (Non ho ancora provato, ma penso che dovrebbe funzionare.)

Esiste un modo diretto per accedere/passare questo valore di proprietà?

saluti, Florian

+0

Probabilmente potremmo configurare per impostare una proprietà di sistema, ma in qualche modo non mi piace l'idea di passare le cose tramite le proprietà di sistema. D'altra parte, si potrebbe dire che questo è qualcosa di specifico dell'ambiente (il percorso assoluto almeno). Cosa ne pensi? – Puce

risposta

5

ricordare che il test di unità non devono essere eseguiti da Maven plug infallibile, quindi ${project.build.directory} proprietà non potrebbe essere disponibile. Per rendere i tuoi test più portabili, preferirei usare l'File.createTempFile().

+2

Beh, in realtà, questo è ciò che facciamo attualmente e voglio cambiarlo. Abbiamo avuto un problema che la directory tmp su Hudson si è riempita fino a quando non abbiamo esaurito lo spazio su disco. Stiamo esaminando diverse opzioni, una è quella di passare una directory tmp all'interno della directory di destinazione come argomento a File.createTempFile(). In questo modo, "mvn clean" pulisce tutto. – Puce

+0

Inoltre, poiché questo è un progetto Maven, penso che i test funzioneranno solo usando Maven o un IDE che supporta Maven (qui: Eclipse). – Puce

12

Penso che l'utilizzo delle proprietà di sistema sia abbastanza semplice se si configura il plugin surefire come spiegato qui http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html. Anche l'esempio qui risponde alla tua domanda direttamente:

<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

Ho usato qualcosa del genere con un po 'di successo prima. Il test dell'unità continuerà a essere eseguito anche se non si utilizza Maven, la directory di destinazione verrà comunque creata con due dir up rispetto alla cwd ovunque vengano eseguiti i test.

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

Grande che funziona per me in Maven ed Eclipse. –

+0

Leggermente in ritardo rispetto alla discussione ma non 'relPath' uguale a' src/main/java' quindi sicuramente devi risolvere il problema con '../../../ target'? – Adam

Problemi correlati