Gabi und Sascha
Kategorien : Alle | Berlin | Bücher | Fotografie | Java | Linkhalde | Weichware | Verfassung

Bei Tests kommt es manchmal vor, dass eine Datei via URL-Referenz angezogen werden muss. Für ein effektives testen ist es nicht sinnvoll solche Dateien auf einem Web-Server zu hinterlegen. Die Testumgebung wird damit abhängig von dem Web-Server und der darauf verweisenden URL. In Maven 1.x ist es möglich eine solche URL über die Datei build.properties zu definieren. In Umgebungen mit einem automatischen Build-System wie z.B. CruiseControl ist dies allerdings keine glückliche Lösung.

Statt einer http:-URL können auch file:-URLs verwendet werden. Java kann mit einer solchen URL nativ umgehen. Eine File-URL wirkt auf den ersten Blick als eine noch abwegigere Lösung, zeigt sie doch in das Dateisystem eines Rechners. Damit ist sie ebenfalls von der ausführenden Umgebung abhängig. In Umgebungen in denen unter Windows entwickelt wird und das Build-Tool unter Unix arbeitet wird das Problem verschärft.

Das Maven-Test Plug-In bietet ein Lösung. Es definiert das Property maven.junit.sysproperties. Der Wert des Properties ist eine Whitespace separierte Liste von weiteren Properties. Die Properties der Liste werden mit ihren Werten in den Java System-Properties gesetzt. Dabei kann die Jelly-Variablenersetzung genutzt werden.

Beispiel:


    maven.junit.sysproperties=speexx.url.baseDir
    speexx.url.baseDir=${basedir}
  

In ${basedir} liegt eine Datei data.txt. Aus diesen Informationen kann ein JUnit-Test mit Hilfe der Methode java.io.File.toUrl() eine URL erzeugen.


    final String basePath = System.getProperty("speexx.url.baseDir");
    final File dir = new File(basePath);
    final File data = new File(dir, "data.txt");

    final URL url = data.toURL();
  

Mit der erzeugten URL kann der eigentliche Test durchgeführt werden.

Download: maven-url-example.tar.bz2