2012-09-05 113 views
3

作为JUnit测试(从ANT执行)的一部分,我需要访问一些公平的属性,这些属性不仅依赖于环境,而且还可以从一次运行切换到下一次运行。为了不影响任何可能使用相同build.xml的其他开发者,我希望在命令行中使用-D标志定义这些属性(它们可以使用脚本轻松填充)。阅读关于蚂蚁中的<junit>任务,我认为这些属性可以轻松地复制到使用clonevm标志运行JUnit测试的虚拟机,但这似乎不起作用。在<junit>呼叫之前的简单<echo>确认属性都设置正确,我再与下面的执行JUnit测试:如何将VM属性复制到ANT中的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");读取属性值,但总是空。我假设我必须做错事情,以便将属性不发送给JUnit VM,否则我没有正确读取它。有任何想法吗?我想我可以解决这个问题(使用脚本编写一个临时属性文件,然后从测试中读取),但是如果可能的话,我仍然想知道如何做到这一点。

+0

尝试使用嵌套的syspropertyset元素。请参阅junit文档:http://ant.apache.org/manual/Tasks/junit.html –

+0

这听起来可行。不幸的是,它不是我能够保留的解决方案(我粘贴的构建脚本的片段不受我控制,我只能设置各种参数),但我当然可以测试它并查看它是否有效。 – Thor84no

+0

@ MarkO'Connor我已经看过它并发现使用''以及'非常有用,因为它可以轻松地在JUnit测试中提供ANT中提供的所有属性。我可能会将其传递给构建团队,以便稍后使用它。非常感谢。你应该把它作为答案,所以我可以给你点分数。 – Thor84no

回答

相关问题