如何在ANT中将VM属性复制到JUnit任务?

时间:2012-09-05 12:08:49

标签: ant junit

作为JUnit测试的一部分(从ANT执行),我需要访问一些不仅依赖于环境,而且还可以从一次运行更改为下一次运行的一些属性。为了不影响可能使用相同build.xml的众多其他开发人员,我想在命令行上使用-D标志定义这些属性(可以使用脚本轻松填充它们)。阅读ant中的<junit>任务我认为使用clonevm标志可以轻松地将这些属性复制到运行JUnit测试的VM,但这似乎不起作用。 <echo>调用之前的简单<junit>确认属性设置正确,然后我使用以下命令执行JUnit测试:

<junit
    printsummary="on" showoutput="true" timeout="${tests.timeout.value}"
    haltonfailure="false" errorproperty="test.error.occurred"
    haltonerror="false" failureproperty="test.failure.occurred" forkmode="perTest"
    maxmemory="${project.junit.maxmemory}" clonevm="true">
    <jvmarg line="${project.test.vmargs}"/>
    <sysproperty key="java.io.tmpdir" value="${java.io.tmpdir}"/>
    <formatter type="xml" usefile="true"/>
    <classpath>
        <path refid="build.test.classpath"/>
    </classpath>
    <batchtest fork="yes" todir="${test.rpt.dir}">
        <fileset dir="${test.bin.dir}">
            <include name="**/${test.classes.run}.class"/>
            <includesfile name="${test.run.includesfile}"/>
            <!-- ignore inner classes -->
            <exclude name="**/*$*.class"/>
        </fileset>
    </batchtest>
</junit>

然后我尝试使用System.getProperty("property");读取属性值,但始终为null。我假设我必须做错事,以便不将属性发送到JUnit VM,或者我没有正确读取它。有任何想法吗?我想我可以解决这个问题(使用脚本编写临时属性文件,然后从测试中读取),但我仍然想知道如果可能的话如何做到这一点。

1 个答案:

答案 0 :(得分:2)

尝试使用嵌套的syspropertyset元素。

请参阅junit documentation