Выполнение модульных тестов 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"/>