puntos - ant simulador
¿Cómo paso un argumento a una tarea Ant? (9)
¿Qué pasa con el uso de algunos condicional en su objetivo de prueba y la especificación 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>
Adaptado un poco de la hormiga preguntas frecuentes .
No soy muy bueno con Ant, pero lo estamos usando como herramienta de compilación. En este momento, podemos ejecutar "prueba de hormiga" y se ejecutará a través de todas las pruebas de la unidad.
Sin embargo, me encantaría poder hacer algo como ant test some_module
y hacer que acepte some_module
como parámetro, y solo probar eso.
No he podido encontrar cómo pasar argumentos de línea de comando a Ant, ¿alguna idea?
Ant realmente no tiene parámetros_ para el archivo de compilación. Puedo pensar en algunas maneras de hacer esto:
Use un objetivo especial para especificar las pruebas. Puede usar la tarea <for/>
de AntContrib para permitirle especificar múltiples pruebas. Tendrá que descargar el archivo jar Ant-Contrib . Recomiendo colocarlo dentro de su proyecto en el directorio `$ {basedir} / antlib / antcontrib ''. De esa forma, cuando otros finalicen la compra de su proyecto, obtendrán el archivo jar Ant-Contrib necesario.
<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>
Usted cab ahora ejecuta múltiples pruebas como esta:
$ ant -D"test-one test-two test-three" select-test
Intenté las soluciones publicadas aquí para la misma pregunta original. Sí, solo use ant -D<arg_name>
. TH- -D
es una "palabra clave", supongo. No soy un experto en hormigas y no he leído los manuales en detalle. Luego, dentro de la ant se puede acceder a los archivos XML como: ${arg_name}
Por ejemplo, puede tener un nombre de argumento como: arg.myarg
, por lo que en XML ${arg.myarg}
.
Para los argumentos, hay Facilidad llamada propiedad. Debes establecer la propiedad. Como en ANT, los argumentos simples se toman como nombre de destino.
Para que no digas que tienes dos módulos en tu proyecto ModuleX y ModuleY donde ModuleX tiene 2 testcases para ejecutar y ModuleY con 10 testcases.
Podrías hacer algo como esto:
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>
Puede definir una propiedad en la línea de comando cuando invoca a hormiga:
ant -Dtest.module=mymodulename
Entonces puedes usarlo como cualquier otra propiedad de hormiga:
...
<fileset dir="${test.dir}" includes="**/${test.module}.class" />
...
Eche un vistazo al manual de Ant .
Puede intentar esto para acceder a un objetivo a la vez. Agregue estas líneas a su archivo build.xml:
<project name="whatever" default="default">
<input message="Please select module:" addproperty="mod" />
<target name="default" depends="${mod}/>
...
</project>
Esto le permite ingresar el módulo que desea ejecutar y ejecutarlo en lugar de ejecutar todo el build.xml
Es posible que deba realizar algunos cambios más en su build.xml para que esto funcione a la perfección.
También puede definir una propiedad con un valor predeterminado opcional que se puede reemplazar a través de la línea de comando, por ej.
<target name="test">
<property name="moduleName" value="default-module" />
<echo message="Testing Module: ${moduleName}"/>
....
</target>
y ejecutarlo como:
ant test -DmoduleName=ModuleX
Una solución podría ser la siguiente. (Tengo un proyecto que hace esto).
Tener un objetivo diferente similar a la test
con un conjunto de fileset
que restrinja la prueba a una sola clase. Luego pase el nombre de esa clase usando -D
en la línea de comando de la hormiga:
ant -Dtest.module=MyClassUnderTest single_test
En build.xml (altamente reducido):
<target name="single_test" depends="compile" description="Run one unit test">
<junit>
<batchtest>
<fileset dir="${test.dir}" includes="**/${test.module}.class" />
</batchtest>
</junit>
</target>