В моем проекте используется Ant, и в нем есть несколько тестовых наборов. Поскольку каждый люкс побежал подобным образом, есть макрос, определенный:Запуск Ant-макроса из задачи покрытия Jacoco
<macrodef name="exec-tests">
<attribute name="test-suite" />
<element name="test-run" implicit="yes" />
<sequential>
<junit printsummary="yes" haltonfailure="true" haltonerror="true" showoutput="true" outputtoformatters="true" fork="true" maxmemory="512m">
<jvmarg value="-XX:MaxPermSize=256m" />
<jvmarg value="-Xmx512m" />
<jvmarg value="-Xms512m" />
<classpath refid="test.run.class.path" />
<formatter type="plain" usefile="false" />
<formatter type="xml" usefile="true" />
<test name="@{test-suite}" todir="${test.build.results.dir}" />
</junit>
</sequential>
</macrodef>
Таким образом, существует несколько задач, работающих различных наборов, как это:
<target name="run-xxx-tests" depends="build-tests">
<exec-tests test-suite="com.mycompany.XxxTestsSuite" />
</target>
<target name="run-yyy-tests" depends="build-tests">
<exec-tests test-suite="com.mycompany.YyyTestsSuite" />
</target>
Теперь я также хочу, чтобы запустить тестовый набор с охватом Якоко. Так что было бы неплохо сделать это:
<target name="run-xxx-tests-with-coverage" depends="build-tests">
<jacoco:coverage destfile="${test.coverage.unit.file}">
<exec-tests test-suite="com.mycompany.XxxTestsSuite" />
</jacoco:coverage>
</target>
Однако Jacoco, кажется, не поддерживает макросы внутри тега покрытия, так как я получаю сообщение об ошибке:
Caused by: C:\Users\taavi\projects\cds\build.xml:87: exec-tests is not a valid child of the coverage task
at org.jacoco.ant.CoverageTask.addTask(CoverageTask.java:68)
at org.apache.tools.ant.UnknownElement.handleChildren(UnknownElement.java:367)
Сейчас я создал еще один macrodef, который очень похож на «exec-tests», но просто добавляет покрытие. Это не критично, но мне интересно, есть ли способ избежать этой дублирующей части задачи «junit»?
k6ps
Да, эта идея сработала для меня. Мне даже не нужен локальный тег, я просто представил свойство с включенным покрытием для макродефа: ' ' –
k6ps