Как задать свойства системы в качестве параметров в Ant JunitLauncher - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь перенести мой набор тестов с Junit4 на Junit5. У меня есть набор системных свойств, заданных в качестве параметров в более старых целях, которые запускают тесты на Junit4, но теперь, когда я перехожу на Junit5, JunitLauncher не поддерживает этот параметр.

Старая цель, которая запускает тесты на Junit4:

<target name="test">
    <mkdir dir="${junit_reports.dir}" />
    <junit printsummary="${junit.printsummary}" haltonfailure="${junit.haltonfailure}" haltonerror="${junit.haltonerror}" showoutput="${junit.showoutput}" fork="true" forkmode="once" failureProperty="failed">
        <sysproperty key="clover.initstring" value="${clover.dbdir}/${clover.dbfile}" />
        <sysproperty key="rules.location" value="${classes.dir}/rules/impl" />
        <classpath>
            <path refid="classes.classpath" />
            <path refid="test.classpath" />
            <pathelement path="${basedir}/../../.." />
            <pathelement path="${test.classes.dir}" />
            <path location="${basedir}/../common/target/test_classes" />
            <pathelement location="${3rdparty.dir}/prime-server-framework/framework-core-mock.jar" />
        </classpath>
        <formatter type="${unittest.output.type}" />
        <batchtest fork="true" todir="${junit_reports.dir}">
            <fileset dir="${test.classes.dir}" includes="${tests.patternset}" />
        </batchtest>
    </junit>
</target>

Новая цель, которая запускает тесты на Junit5:

<target name = "sampletest">
    <mkdir dir="${junit_reports.dir}" />
    <junitlauncher>
        <classpath>
            <path refid="classes.classpath" />
            <path refid="test.classpath" />
            <pathelement path="${basedir}/../../.." />
            <pathelement path="${test.classes.dir}" />
            <path location="${basedir}/../common/target/test_classes" />
        </classpath>
        <!--<testclasses outputdir="${junit_reports.dir}">
          <fileset dir="${test.classes.dir}">
              <include name = "**/*Test.class"/>
          </fileset>
        </testclasses>-->
        <test name = "impl.RulesEngineValidationTest"/>
    </junitlauncher>
</target> 

Как дать системные свойства в новой цели?

1 Ответ

0 голосов
/ 15 июля 2018

Ant 1.10.4 поддерживает JUnit 5. Однако он не поддерживает все функции, которые обеспечивает интеграция Ant в JUnit 4. В частности, он не поддерживает разветвление процесса junit и, следовательно, передачу системных свойств.

Я нашел этот вопрос, потому что пытался сделать то же самое. Я нашел обходной путь, хотя. Вы можете установить системные свойства в коде перед вызовом junitlauncher.

Этот код - то, что я использовал, чтобы установить единственное системное свойство для кодирования файла. Вы могли бы сделать что-то подобное для ваших свойств.

<script language="javascript">
  <![CDATA[
    var imports = new JavaImporter(java.lang.System);
    imports.System.setProperty('file.encoding', 'ISO8859_1')
  ]]>
</script>

У вас немного сложнее, так как ваши свойства используют другие. Вы можете прочитать переменную Ant из кода. (Я не знаю, как читать одно с точкой в ​​имени, поэтому я избавился от точки в этом примере)

<property name="cloverdbdir" value="clover-dir-property-value" />
<property name="cloverdbfile" value="clover-db-file-property-value" />

<script language="javascript">
  <![CDATA[
    var imports = new JavaImporter(java.lang.System);
    imports.System.setProperty('clover.initstring', cloverdbdir + '/' + cloverdbfile);
    print(imports.System.getProperty('clover.initstring'));
  ]]>
</script>

Есть несколько вещей, о которых следует знать, если вы используете эту технику:

  1. Нашорн устарел для удаления. Это определенно в Java 11. Однако, это не гарантировано для всех будущих версий. Вполне вероятно, что Ant к тому времени добавит функциональность системных свойств, поэтому я не беспокоюсь об этом.
  2. Системное свойство остается установленным до конца сборки. Это не выглядит проблемой для вас. Если это так, вам понадобится другой блок скрипта после вызова JUnit, чтобы обнулить его.
...