У меня есть проект 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 .