如何设置Ant'junit'任务的工作目录?

Dón*_*nal 12 java ant junit

我的Ant构建包括一个运行一些测试的junit任务.为了使测试起作用,user.dir必须更改指定当前工作目录()的属性的值,但我不确定如何实现此目的.

有问题的任务目前看起来像这样:

<junit printsummary="withOutAndErr" fork="true"
           haltonfailure="yes" showoutput="true"
           filtertrace="false" dir="C:/workspace/obp-web">
    <jvmarg value="-Duser.dir=C:/workspace/obp-web"/>

    <classpath>
        <fileset dir="${web.lib.dir}" includes="**/*.jar"/>
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </classpath>    
    <batchtest fork="no" todir="${web.build.dir}/testresults">
        <formatter type="xml"/>
        <zipfileset src="${web.build.dir}/test-obp-web.jar">
            <include name="**/*Test.class"/>
        </zipfileset>           
    </batchtest>
</junit>
Run Code Online (Sandbox Code Playgroud)

请注意,我尝试使用"dir"属性和"jvmarg"任务将工作目录更改为C:/ workspace/obp-web.但是当我运行Ant并打开详细输出时,我看到以下输出,表明工作目录未正确设置:

如果在同一个VM中运行,则会忽略[junit] dir属性

[junit]使用系统属性 {java.runtime.name = Java(TM)SE运行时环境,sun.boot.library.path = c:\ jdk6\jre\bin,java.vm.version = 10.0-b23,ant. lib rary.dir = C:\ java\apache-ant-1.7.0\lib,java.vm.vendor = Sun Microsystems Inc.,java.vendor.url = http://java.sun.com/,path. separator =;,java.vm.name = Java HotSpot(TM)客户端VM,file.encoding.pkg = sun.io,user.country = CA,sun.java.launcher = SUN_STANDARD,sun.os.patch.level = Service Pack 1,java.vm.specification.name = Java虚拟机规范, user.dir = c:\ workspace\obp-ear,java.runtime.version = 1.6.0_07-b06,java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment,java.endorse d.dirs = c:\ jdk6\jre\lib\endorsed,os.arch = x86,java .io.tmpdir = C:\ Users\donal\AppData\Local\Temp \,line.separator =

Jef*_*ick 14

使用属性"dir"(还必须分叉vm):

http://ant.apache.org/manual/Tasks/junit.html

  • 这对我也有用.别忘了fork ="是". (3认同)
  • 比凯文的"正确"答案要好得多. (2认同)

Kev*_*vin 7

尝试使用jvmarg:

<junit fork="yes">
  <jvmarg value="-Duser.dir=somedir"/>
  ...
</junit>
Run Code Online (Sandbox Code Playgroud)

请注意,对于junit标记和batchtest标记,fork 必须为true,因为batchtest标记会覆盖junit中的值.Jvmargs仅在junit分叉新JVM时才有效.