2010-12-06 27 views
5

我有一個運行JUnits測試的ant文件。這些測試依賴於某些配置文件的相對路徑。我試圖設置批處理測試的工作目錄,但失敗。在ant junit中更改工作目錄任務

我想要的工作目錄是${plugins.dir}/${name}

螞蟻腳本的JUnit的一部分:

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

我GOOGLE了搜查,但我已經找到了解決方法已經設置了「目錄「,」sysproperty「或」jvmarg「。正如你可以看到我已經試過他們所有:)

有沒有辦法在標籤中打印當前目錄?它不支持。這將允許我驗證目錄是否實際上發生了變化,以及發生了什麼。

這個公式中的一個通配符是,它在Hudson中運行,啓動uclipse啓動antrunner的eclipse過程。這樣我們就可以運行junit和eclipse插件的junit測試。不應該與我認爲的問題有任何關係。

+3

這難道不是可以簡單地解決您的測試,他們是獨立的?例如。如果你需要的資源放在classpath的某個地方,你可以通過getClass()。getResource(String)來加載它們。 – 2010-12-06 16:06:07

+0

@馬克皮特,是的,這是可能的。但是這涉及更新一些400-500測試,所以我寧願考慮該計劃B. – Fredrik 2010-12-07 14:13:07

回答

5

我認爲你是正確的設置basedir屬性(見projects attributes)。但是,由於它是ANT(而不是JVM)的屬性,因此它是隻讀的!

如果您在調用您的ant任務時設置了basedir,是否會影響其他目標?見Command Line reference

ant -Dbasedir=somedir 

或者,跨越一個新的ant進程來調用你的junit目標。請參閱AntCall taskAnt task。以下示例假設junit目標包含您的junit任務。我用這個任務的其他屬性(從來不需要迄今爲止的basedir屬性。

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

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

謝謝。我還沒有時間來嘗試這個,但它似乎至少可以解決我的一些問題,所以我將其標記爲答案。 – Fredrik 2010-12-14 10:29:07

5

我有同樣的場景,在我的情況,我看到,如果在同一個JVM運行dir="...."被忽略,所以我只是簡單地添加fork='true'和它工作

報價從Apache的文檔的網站。「DIR - 。在調用虛擬目錄忽略,如果叉被禁用」。更多here

1

我使用NetBeans當我加入Ant屬性(來自工具,選項,Java,Ant)work.dir=C:/MyWorkingDir/它執行ant用下面的命令,並改變工作目錄到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