Выполнение модульных тестов groovy в ant для проекта java
У меня есть проект Java с некоторыми модульными тестами, написанными с использованием JUnit. Недавно были добавлены новые модульные тесты, которые написаны в groovy (также с использованием JUnit), так как проще сделать эти
более выразительным и в целом легче читать. Это также позволяет использовать фреймворк spock.
Проект строится и тестируется с помощью ant.
До добавления классов groovy модульные тесты выполнялись с помощью следующей задачи ant:
<target name="test" depends="test-compile">
<junit printsummary="yes">
<classpath>
<path refid="test.classpath"/>
</classpath>
<formatter type="plain"/>
<batchtest fork="yes" todir="${test.dir}/report">
<fileset dir="${test.dir}/unit" includes="**/*.java"/>
</batchtest>
</junit>
</target>
Однако этот подход не работает для тестов groovy, так как они находятся в файлах *.groovy
и JUnit ant task, понятно, не распознает их в fileset
.
Альтернативный подход заключается в использовании файлов *.class
для batchtest
fileset
следующим образом:
<batchtest fork="yes" todir="${test.dir}/report">
<fileset dir="${test.dir}/${build.dir}">
<include name="**/*Test*.class" />
</fileset>
</batchtest>
Это генерирует ложные негативы, поскольку файлы класса закрытия также включены, поэтому возможным обходным путем является исключение этих файлов.
<batchtest fork="yes" todir="${test.dir}/report">
<fileset dir="${test.dir}/${build.dir}">
<include name="**/*Test*.class" />
<exclude name="**/*$*.class" />
</fileset>
</batchtest>
Есть ли лучший способ определить тестовые классы для задачи junit ant? Возможно, на основе рефлексии и атрибута @Test
вручную перечислены все классы тестов (которые будут работать отлично) на самом деле не является поддерживаемым решением. Что-то вроде SpecClassFileSelector
из рамки Spock.
Ответы
Ответ 1
как изменить шаблон включения на *Test
, а не *Test*
как @jon-skeet предложил здесь.
Таким образом, он не будет соответствовать классам анонимного закрытия.
вам придется переименовать существующие классы и попросить разработчиков следовать этому шаблону.
Ответ 2
Взгляните на:
http://www.ibm.com/developerworks/java/library/j-pg11094/
Там есть groovyc ant taskdef для компиляции тестовых примеров groovy и их запуска. В примере есть Maven, но не нужно слишком сложно адаптировать его, чтобы делать то, что вы хотите.
Ответ 3
Разве вы не можете просто написать что-то вроде этого?
<fileset dir="${test.dir}/unit" includes="**/*.java,**/*.groovy"/>