Подтвердить что ты не робот

Как передать аргумент в задачу Ant?

Я не очень хорош с Ant, но мы используем его как инструмент сборки. Прямо сейчас мы можем запустить "ant test", и он будет проходить через все модульные тесты.

Однако мне бы хотелось сделать что-то вроде ant test some_module и принять его some_module как параметр и только проверить это.

Мне не удалось найти, как передать аргументы командной строки в Ant - любые идеи?

4b9b3361

Ответ 1

Одним из решений может быть следующее. (У меня есть проект, который делает это.)

У вас есть отдельная цель, похожая на test с fileset, которая ограничивает проверку только одним классом. Затем передайте имя этого класса с помощью -D в командной строке ant:

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>

Ответ 2

Как насчет использования некоторых условных условий в тестовой цели и указании -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.

Ответ 3

Вы можете определить свойство в командной строке при вызове ant:

ant -Dtest.module=mymodulename

Затем вы можете использовать его как любое другое свойство ant:

...
    <fileset dir="${test.dir}" includes="**/${test.module}.class" />
...

Посмотрите Ant руководство.

Ответ 4

Вы также можете определить свойство с необязательным значением по умолчанию, которое можно заменить с помощью командной строки, например

<target name="test">
  <property name="moduleName" value="default-module" />
  <echo message="Testing Module: ${moduleName}"/>
  ....
</target>

и запустите его как:

ant test -DmoduleName=ModuleX

Ответ 5

Я попробовал решения, размещенные здесь для того же самого оригинального вопроса. Да, просто используйте ant -D<arg_name>. Я думаю, что -D является ключевым словом. Я не эксперт ant и не читал руководства подробно. Затем внутри XML файлов ant можно получить доступ, например: ${arg_name}

Например, у вас может быть имя аргумента вроде: arg.myarg, поэтому в XML ${arg.myarg}.

Ответ 6

Ant действительно не имеет параметров_ для файла сборки. Я могу придумать несколько способов сделать это:

Используйте специальную цель для задания тестов. Вы можете использовать задачу <for/> из AntContrib, чтобы вы могли указать несколько тестов. Вам нужно будет скачать файл 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

Для аргументов существует свойство, называемое Facility. Вам нужно установить свойство. Как и в ANT простые аргументы принимаются как имя цели.

Ответ 8

Допустим, у вас есть два модуля в вашем проекте 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>