Выполнение заводных юнит-тестов в муравье для Java-проекта - PullRequest
13 голосов
/ 17 января 2011

У меня есть проект Java с некоторыми модульными тестами, написанными с использованием JUnit. Недавно были добавлены некоторые новые модульные тесты, написанные на groovy (также с использованием JUnit), так как их легче сделать. более выразительным и в целом легче читать. Это также позволяет нам использовать каркас спока.

Проект собран и протестирован с 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 , понятно, не распознает их в 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 framework .

Ответы [ 3 ]

3 голосов
/ 06 марта 2011

как насчет изменения шаблона включения на *Test вместо *Test*, как предложил @ jon-skeet здесь .

Таким образом, он не будет соответствовать анонимным классам закрытия.

вам придется переименовать существующие классы и попросить разработчиков следовать этому шаблону.

0 голосов
/ 22 января 2011

Разве вы не можете просто написать что-нибудь подобное?

        <fileset dir="${test.dir}/unit" includes="**/*.java,**/*.groovy"/>
0 голосов
/ 20 января 2011

Взгляните на:

http://www.ibm.com/developerworks/java/library/j-pg11094/

Существует Groovyc Ant Taskdef для компиляции Groovy тестовых случаев и их запуска. В качестве примера можно привести Maven, но его не должно быть слишком сложно адаптировать к тому, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...