我对Ant不太满意,但我们将它用作构建工具。现在,我们可以运行“蚂蚁测试”,它将贯穿所有单元测试。
但是,我希望能够做ant test some_module
这样的事情并让它接受some_module
作为参数,并且只测试它。
我无法找到如何将命令行参数传递给Ant - 任何想法?
答案 0 :(得分:38)
一种解决方案可能如下。 (我有一个项目可以做到这一点。)
有一个与test
类似的单独目标,其中fileset
仅将测试限制为一个类。然后在ant命令行使用-D
传递该类的名称:
ant -Dtest.module=MyClassUnderTest single_test
在build.xml中(高度减少):
<target name="single_test" depends="compile" description="Run one unit test">
<junit>
<batchtest>
<fileset dir="${test.dir}" includes="**/${test.module}.class" />
</batchtest>
</junit>
</target>
答案 1 :(得分:6)
如何在测试目标中使用某些条件并指定-Dcondition=true
?
<target name="test" depends="_test, _test_if_true>
...
</target>
<target name="_test_if_true" if="condition">
...
</target>
<target name="_test" unless="condition">
...
</target>
从ant faq改编了一下。
答案 2 :(得分:6)
您还可以使用可选的默认值定义属性,该值可以通过命令行替换,例如
<target name="test">
<property name="moduleName" value="default-module" />
<echo message="Testing Module: ${moduleName}"/>
....
</target>
并将其运行为:
ant test -DmoduleName=ModuleX
答案 3 :(得分:4)
您可以在调用ant时在命令行上定义属性:
ant -Dtest.module=mymodulename
然后您可以将其用作任何其他ant属性:
...
<fileset dir="${test.dir}" includes="**/${test.module}.class" />
...
查看Ant's manual。
答案 4 :(得分:1)
我尝试了这里发布的解决方案,用于原始问题。是的,只需使用ant -D<arg_name>
。我猜-D
是一个“关键字”。我不是蚂蚁专家,也没有详细阅读过这些手册。然后在ant XML文件中可以访问:${arg_name}
例如,您可以使用参数名称:arg.myarg
,因此在XML ${arg.myarg}
中。
答案 5 :(得分:1)
您可以尝试一次访问一个目标。将这些行添加到build.xml文件中:
<project name="whatever" default="default">
<input message="Please select module:" addproperty="mod" />
<target name="default" depends="${mod}/>
...
</project>
这允许您输入要执行的模块并执行该模块而不是运行整个build.xml
您可能需要对build.xml进行一些更改才能使其完美运行。
答案 6 :(得分:0)
Ant实际上没有构建文件的参数_。我可以想到几种方法:
<for/>
任务来指定多个测试。您需要下载Ant-Contrib jar文件。我建议将它放在你的项目中`$ {basedir} / antlib / antcontrib“目录下。这样,当其他人检查你的项目时,他们会获得所需的Ant-Contrib jar文件。<property name="antlib.dir" value="${basedir}/antlib"/>
<property name="antcontrib.dir" value="${antlib}/antcontrib"/>
<!-- Set up the ant contrib tasks for your use -->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<fileset dir="${antcontrib.dir}"/>
</classpath>
</taskdef>
<target name="select-test"
description="Select the tests to run"
depends="test-compile"
if="junit-tests">
<for parameter="module"
list="${junit-tests}"
delimiter=" ">
<sequential>
<junit
fork="true"
...>
<batchtest todir="$target/unit-tests">
<fileset dir="${test.destdir}">
<include name="**/@{module}.class"/>
</fileset>
</junit>
</sequential>
</for>
</target>
您现在可以运行多个这样的测试:
$ ant -D"test-one test-two test-three" select-test
答案 7 :(得分:0)
对于参数,有一个称为属性的Facility。您需要设置属性。与在ANT中一样,普通参数被视为目标名称。
答案 8 :(得分:0)
请注意,您的项目ModuleX和ModuleY中有两个模块,其中ModuleX有2个要运行的测试用例,ModuleY有10个测试用例。
你可以这样做:
ant runTestsOnModule -Dtestmodule="ModuleX"
OR to test all modules by calling
ant tests
<target name="runTestsOnModule">
<antCall target="testcase${testmodule}"/>
</target>'
<! -- run single module -->
<target name="runTestsOnModule">
<antCall target="testcase${testmodule}"/>
</target>
<!--run all tests-->
<target name="tests">
<antcall target="testcaseModuleX">
<antcall target="testCaseModuleY">
</target>
<target name="testcaseModuleX">
..run junit task to call 2 testcase
</target>
<target name="testcaseModuleY">
....run junit task to call 10 testcase
</target>