当我通过eclipse通过传递参数运行java测试文件(单个文件(时
-DappRoot=ECM-DappName=ESW-Dapp.module=FNT-Dapp.env=LOC-DcloneNumber=1
测试文件执行时没有出现错误,如果我不给出参数,则会出现无法解析占位符"appRoot"的错误。
我有junit目标生成html格式的报告。
<target name="junit" depends="init-junit">
<junit printsummary="on" fork="yes" forkmode="perBatch" haltonfailure="false" failureproperty="junit.failure" showoutput="false">
<classpath>
<path refid="CLASSPATH_JUNIT"/>
</classpath>
<batchtest fork="no" todir="${TEST_BUILD_DIR}">
<fileset dir="${COMP_TEST_SRC}">
<include name="**/*Test.java" />
</fileset>
</batchtest>
<formatter type="xml" />
</junit>
<junitreport todir="${JUNIT_REPORT}">
<fileset dir="${TEST_BUILD_DIR}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${JUNIT_REPORT}"/>
</junitreport>
</target>
当我运行上面的生成脚本时,得到以下错误:无法解析占位符"appRoot",它已作为参数传递。
我已经通过eclipse将参数传递给了build.xml,这个参数传递给build.xml文件,但没有传递给java文件。我该如何解决这个问题?
编辑:尝试使用以下参数:
<junit printsummary="on" fork="yes" forkmode="perBatch" haltonfailure="false" failureproperty="junit.failure" showoutput="false">
<jvmarg value="-DappRoot=ECM" />
<jvmarg value="-DappName=ESW" />
<jvmarg value="-Dapp.module=FNT" />
<jvmarg value="-Dapp.env=LOC" />
<jvmarg value="-DcloneNumber=1" />
<!--<sysproperty key="appRoot" value="${appRoot}"/>
<sysproperty key="appName" value="${appName}"/>
<sysproperty key="app.module" value="${app.module}"/>
<sysproperty key="app.env" value="${app.env}"/>
<sysproperty key="cloneNumber" value="${cloneNumber}"/>-->
<classpath>
<path refid="CLASSPATH_JUNIT"/>
</classpath>
有了系统参数,它工作得很好,但执行起来需要很长时间。使用jvmarg,它不起作用。出现相同错误
<jvmarg value="-DappRoot=${appRoot}" />
http://ant.apache.org/manual/Tasks/junit.html没有为sys和jvm参数定义任何限制。
junit ant任务的文档显示:
<junit fork="yes" ...>
<jvmarg value="-DappRoot=ECM" />
</junit>
如果appRoot属性作为系统属性传递给ant,则可以将其作为ant属性进行访问:
<junit fork="yes" ...>
<jvmarg value="-DappRoot=${appRoot}" />
</junit>
您已经在batchtest
元素中设置了fork="no"
,这将覆盖junit
元素中的fork
设置。这导致junit
任务在与ant进程相同的JVM中执行,这意味着jvmarg
参数将被忽略。
我还建议使用"一次"的分叉模式;这将大大提高性能。
试试这个:
<junit printsummary="on" fork="yes" forkmode="once" maxmemory="512m"
haltonfailure="false" failureproperty="junit.failure"
showoutput="false">
<jvmarg value="-DappRoot=ECM" />
<jvmarg value="-DappName=ESW" />
<jvmarg value="-Dapp.module=FNT" />
<jvmarg value="-Dapp.env=LOC" />
<jvmarg value="-DcloneNumber=1" />
<classpath>
<path refid="CLASSPATH_JUNIT"/>
</classpath>
<batchtest todir="${TEST_BUILD_DIR}">
<fileset dir="${COMP_TEST_SRC}">
<include name="**/*Test.java" />
</fileset>
</batchtest>
<formatter type="xml" />
</junit>
注意maxmemory
属性。根据需要调整该值。