2008-10-29 12 views
17

Ich schreibe einen Test für eine Datei Parser-Klasse. Die Parse-Methode erhält einen Dateinamen als Parameter und muss ihn öffnen, um ihn zu analysieren (duh).Wie Maven-Eigenschaften in einem JUnit-Test abgerufen werden?

Ich habe eine Testdatei geschrieben, die ich in das test/resources-Verzeichnis innerhalb meines Projektverzeichnisses lege, und möchte diese Datei übergeben, um mein parse zu testen. Da dieses Projekt in CVS ist und von anderen manipuliert wird, kann ich den Dateipfad nicht hart codieren, also dachte ich über die maven $ {basedir} -Eigenschaft nach, um den Dateinamen in meinem Test zu erstellen. Etwas wie:

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

Weiß jemand wie ich das erreichen könnte?

Antwort

22

Sie haben 2 Möglichkeiten:

1) Führen Sie den Dateipfad über eine Systemeigenschaft zu Ihrem Test (docs)

In Ihrem pom Sie so etwas wie tun könnte:

<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> 

Dann in Ihrem Test können Sie tun:

System.getProperty("filePath"); 

2) Legen Sie die Datei in sr c/test/resources unter dem gleichen Paket wie Ihre Testklasse. Dann können Sie mit Class.getResourceAsStream (String fileName) (docs) zu der Datei gelangen.

Ich würde Option 2 über Option 1 empfehlen. Passing Dinge zu Ihren Tests über Systemeigenschaften ist sehr schmutzig IMO. Es koppelt Ihre Tests unnötig mit dem Testläufer und verursacht Kopfschmerzen auf der Straße. Laden der Datei aus dem Klassenpfad ist der Weg zu gehen und deshalb hat Maven das Konzept eines Ressourcenverzeichnisses.

+0

Ich nehme die Option 2. Aber da ich den Dateinamen übergeben möchte, verwende ich die Class.getResourceAsStream (String fileName) -Methode, verwende ich Class.getResource (String fileName) .getFile(). Danke Mike – Alexandre

+0

Das ist cool. Seien Sie sich jedoch bewusst, dass Sie, wenn Sie die Tests jemals aus einer JAR ausführen müssen (was unwahrscheinlich ist), ein merkwürdiges Verhalten zeigen können. –

+2

Nicht sicher, wie vollständig diese Antwort ist - was ist mit "Integration Test" -Eigenschaften wie lokale DB-Adresse, die Sie in Ihrer privaten settings.xml speichern möchten? –

Verwandte Themen