Je ne suis pas très bon avec Ant, mais nous l'utilisons comme outil de construction. À l'heure actuelle, nous pouvons exécuter "ant test" et il exécutera tous les tests unitaires.
Cependant, j'aimerais pouvoir faire quelque chose comme ant test some_module
et le laisser accepter some_module
en tant que paramètre et le tester uniquement.
Je n'ai pas réussi à trouver comment passer des arguments en ligne de commande à Ant - des idées?
Une solution pourrait être la suivante. (J'ai un projet qui fait ça.)
Avoir une cible distincte semblable à test
avec une fileset
qui limite le test à une seule classe. Ensuite, transmettez le nom de cette classe en utilisant -D
sur la ligne de commande ant:
ant -Dtest.module=MyClassUnderTest single_test
Dans le build.xml (fortement réduit):
<target name="single_test" depends="compile" description="Run one unit test">
<junit>
<batchtest>
<fileset dir="${test.dir}" includes="**/${test.module}.class" />
</batchtest>
</junit>
</target>
Qu'en est-il de l'utilisation de certaines conditions dans votre cible de test et de la spécification de -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>
Adapté un peu du ant faq .
Vous pouvez également définir une propriété avec une valeur par défaut facultative pouvant être remplacée via une ligne de commande, par exemple.
<target name="test">
<property name="moduleName" value="default-module" />
<echo message="Testing Module: ${moduleName}"/>
....
</target>
et lancez le comme:
ant test -DmoduleName=ModuleX
Vous pouvez définir une propriété sur la ligne de commande lorsque vous appelez ant:
ant -Dtest.module=mymodulename
Ensuite, vous pouvez l'utiliser comme n'importe quelle autre propriété ant:
...
<fileset dir="${test.dir}" includes="**/${test.module}.class" />
...
Regardez le manuel de Ant .
Vous pouvez essayer ceci pour accéder à une cible à la fois. Ajoutez ces lignes à votre fichier build.xml:
<project name="whatever" default="default">
<input message="Please select module:" addproperty="mod" />
<target name="default" depends="${mod}/>
...
</project>
Cela vous permet d’entrer dans le module que vous voulez exécuter et de l’exécuter lui-même au lieu d’exécuter tout le fichier build.xml
Vous devrez peut-être apporter quelques modifications supplémentaires à votre build.xml pour que cela fonctionne parfaitement.
J'ai essayé les solutions affichées ici pour la même question initiale. Oui, utilisez simplement ant -D<arg_name>
. Le -D
est un "mot clé" je suppose. Je ne suis pas un expert en fourmis et je n'ai pas lu les manuels en détail. Ensuite, à l’intérieur de la fourmi, les fichiers XML peuvent être consultés comme suit: ${arg_name}
Par exemple, vous pouvez avoir un nom d'argument tel que: arg.myarg
, donc en XML ${arg.myarg}
.
De toute façon, vous avez deux modules dans votre projet ModuleX et ModuleY, où ModuleX doit exécuter 2 cas de test et ModuleY avec 10 cas de test.
Vous pouvez faire quelque chose comme ça:
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>
Ant n'a pas vraiment de paramètres pour le fichier de construction. Je peux penser à quelques manières de faire ceci:
<for/>
à partir de AntContrib pour vous permettre de spécifier plusieurs tests. Vous devrez télécharger le fichier Ant-Contrib jar. Je vous recommande de le placer dans votre projet dans le répertoire `$ {basedir}/antlib/antcontrib". Ainsi, lorsque les autres personnes extrairont votre projet, elles obtiendront le fichier jar Ant-Contrib nécessaire.<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>
Vous pouvez maintenant exécuter plusieurs tests comme ceci:
$ ant -D"test-one test-two test-three" select-test
Pour les arguments, il existe une propriété appelée propriété. Vous devez définir la propriété. Comme dans ANT, les arguments simples sont pris comme nom de cible.