2010-12-06 24 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