2010-12-06 12 views
5

Ich habe eine Ant-Datei, die JUnits Tests ausgeführt wird. Diese Tests basieren auf einem relativen Pfad zu bestimmten Konfigurationsdateien. Ich habe versucht, das Arbeitsverzeichnis für den Stapeltest festzulegen, aber fehlgeschlagen.Ändern Arbeitsverzeichnis in Ant Junit Aufgabe

Ich möchte das Arbeitsverzeichnis ${plugins.dir}/${name}

Der JUnit Teil des Ant-Skript sein:

<junit haltonfailure="no" printsummary="on" fork="true" showoutput="true" dir="${plugins.dir}/${name}"> 
    <jvmarg value="-Duser.dir=${plugins.dir}/${name}"/> 
    <classpath> 
     <path refid="project.classpath"/> 
     <pathelement location="${plugins.dir}/${dependency}/@dot/"/> 
     <pathelement location="${plugins.dir}/${name}/" /> 
    </classpath> 
    <formatter type="xml" /> 
    <sysproperty key="basedir" value="${plugins.dir}/${name}"/> 
    <sysproperty key="dir" value="${plugins.dir}/${name}"/> 
    <batchtest todir="${junit.output}"> 
     <fileset dir="${dir}"> 
      <include name="**\*AllTests.class" /> 
     </fileset> 
    </batchtest> 
</junit> 

Ich habe gegoogelt und gesucht, aber die Abhilfen ich gefunden habe, waren die "einzustellen dir "," sysproperty "oder" jvmarg ". Wie Sie sehen können, habe ich sie alle ausprobiert :)

Gibt es eine Möglichkeit, das aktuelle Verzeichnis im Tag zu drucken? Es unterstützt nicht. Das würde mir erlauben zu überprüfen, ob das Verzeichnis tatsächlich geändert wurde und was.

Ein Platzhalter in dieser Gleichung ist, dass dies in Hudson ausgeführt wird, die einen Eclipse-Prozess startet, der einen Trunner startet. Dies ist so, dass wir sowohl Junit- als auch Eclipse-Plugin-Junit-Tests durchführen können. Sollte nichts mit dem Problem zu tun haben, denke ich.

+3

Ist es nicht möglich, einfach die Tests zu beheben, so dass sie in sich geschlossen sind? Z.B. Wenn die benötigten Ressourcen stattdessen in den Klassenpfad verschoben werden, können Sie sie stattdessen über 'getClass(). getResource (String)' laden. –

+0

@Mark Peters, Ja, das ist möglich. Aber das beinhaltet die Aktualisierung einiger 400-500 Tests, also würde ich lieber diesen Plan B in Betracht ziehen. – Fredrik

Antwort

5

Ich denke, Sie haben Recht mit der Einstellung der Eigenschaft basedir (siehe projects attributes). Da es jedoch eine Eigenschaft von ANT ist (und nicht von der JVM), ist es READ ONLY!

Wirkt es sich auf ein anderes Ziel aus, wenn Sie beim Aufruf Ihrer Ameisen-Aufgabe das basedir setzen? Siehe Command Line reference.

ant -Dbasedir=somedir 

Alternativ spannen einen neuen ant Prozess Ihr junit Ziel zu nennen. Siehe die AntCall task oder Ant task. Die folgenden Beispiele gehen davon aus, dass das Junit-Ziel Ihre Junit-Aufgabe enthält. Ich habe diese Aufgabe für andere Eigenschaften (nie so weit die basedir Eigenschaft benötigt.

<antcall target="junit"> 
    <param name="basedir" value="${plugins.dir}/${name}"/> 
</antcall> 

<ant dir="${plugins.dir}/${name}" target="junit" /> 
+0

Danke. Ich habe noch keine Zeit, dies auszuprobieren, aber es scheint, als ob es zumindest einige meiner Probleme lösen würde, also nenne ich dies die Antwort. – Fredrik

5

ich das gleiche Szenario hatte und in meinem Fall sah ich, dass dir="...." ignoriert, wenn in derselben JVM laufen, so fügte ich einfach fork='true' und es arbeitete

Zitat von der Dokumentation Website Apache. „dir -.. ignoriert Das Verzeichnis, in dem die VM berufen, wenn Gabel deaktiviert“... Mehr here

+0

und vergessen Sie nicht, fork = "true" im batchtest-Teil zu verwenden, da es die Eigenschaft junits fork überschreibt. Das hat den Trick für mich gemacht. – dag

1

ich NetBeans bin mit wenn ich in den Ant-Eigenschaften (aus Tools, Optionen, Java, Ant) work.dir=C:/MyWorkingDir/ es führt ant mit dem folgenden Befehl und ändert das Arbeitsverzeichnis zu C:\MyWorkingDir:

ant -f D:\\workspace\\lib\\project -Dfork=true -Djavac.includes=com/myapp/MyTest.java -Dtest.includes=com/myapp/MyTest.java "-Dwork.dir=C:/MyWorkingDir/" test-single