Выполнение "чистых" тестов JUnit 4 с использованием ant
Мы переместились на JUnit 4 и ant 1.7
Тесты отлично работают в eclipse, но аннотации игнорируются при запуске тестов с помощью ant.
В соответствии с задачей ant junit :
Он также работает с JUnit 4.0, включая "чистые" тесты JUnit 4, используя только аннотации и не JUnit4TestAdapter.
Однако в документации не указано, как ее настроить.
Есть ли какой-либо специальный параметр, необходимый для задачи junit? Я что-то упускаю?
У нас есть оба теста, которые расширяют TestCase (т.е. Стиль 3.8) и "чистые" тесты Junit 4, может быть, проблема?
Ответы
Ответ 1
Я использую чистые тесты JUnit4 с Ant.
Вот интересная часть моего файла сборки:
<junit printsummary="yes" haltonfailure="yes">
<formatter type="xml"/>
<classpath refid="path.test"/>
<batchtest fork="yes" todir="${dir.report.unittests.xml}">
<fileset dir="src">
<include name="**/*Test*.java"/>
</fileset>
</batchtest>
</junit>
Убедитесь, что у вас есть последняя версия файла junit.jar в каталоге lib Ant. Насколько мне известно, требуемая версия поставляется с версиями ant 1.7 или более поздней версии...
Ответ 2
Ant поставляется с версией JUnit 3 по умолчанию. JUnit 3 не поддерживает тестовые аннотации.
Чтобы использовать аннотации JUnit 4 из задачи junit, убедитесь, что вы предоставили расположение JUnit 4 jar в вложенном элементе classpath задачи junit (см. эту запись в ant часто задаваемых вопросах).
<junit showoutput="yes" fork="true">
<classpath>
<!-- The location of the JUnit version that you want to use -->
<pathelement location="lib/junit-4.9b1.jar"/>
</classpath>
<formatter type="plain" usefile="false" />
<batchtest>
<fileset dir="${tests.dir}"/>
</batchtest>
</junit>
Это предпочтительное решение для перезаписывания ant -junit.jar в ANT_HOME/lib, поскольку это означает, что вы можете держать JUnit-банку в исходном контроле рядом с кодом, упрощающим обновление до более поздних версий.
Обратите внимание, что пока я не указал шаблон включения в свой набор файлов выше этого, это означает, что задача junit попытается запустить JUnit для всех классов в этой структуре каталогов, что может привести к включению ряда классов, которые не будут 't содержат любые тесты в зависимости от того, как вы структурировали исходные файлы.
Ответ 3
Наконец, вы можете только найти и выполнить тесты с параметром skipNonTests, добавленным в ant 1.9.3+!
Это фрагмент кода из принятого ответа выше (кроме нового параметра skipNonTests и избавления от "теста" в требовании имени файла):
<junit printsummary="yes" haltonfailure="yes">
<formatter type="xml"/>
<classpath refid="path.test"/>
<batchtest skipNonTests="true" fork="yes" todir="${dir.report.unittests.xml}">
<fileset dir="src">
<include name="**/*.java"/>
</fileset>
</batchtest>
</junit>
Ответ 4
Это произошло со мной, и это было потому, что я использовал аннотации и расширил TestCase.
public class TestXXX extends TestCase {
@Test
public void testSimpleValidCase() {
// this was running
}
@Test
public void simpleValidCase() {
// this wasn't running
}
}
При расширении TestCase вы принимаете стиль JUnit3, поэтому аннотации JUnit4 игнорируются.
Решение состоит в том, чтобы остановить расширение TestCase.
Ответ 5
Проверьте свое определение пути к классам...
это решило мою проблему.
<path id="classpath" description="Classpath do Projeto">
<fileset dir="${LIB}">
<include name="**/*.jar" />
<exclude name="**/.SVN/*.*"/>
</fileset>
</path>
Ответ 6
Это важная часть моего общего ant script... не уверен, что это вам поможет или нет.
<junit fork="true"
forkmode="once"
haltonfailure="false"
haltonerror="false"
failureproperty="tests.failures"
errorproperty="tests.errors"
includeantruntime="true"
showoutput="true"
printsummary="true">
<classpath>
<path refid="path-id.test.classpath.run"/>
</classpath>
<formatter type="xml"/>
<batchtest fork="yes"
todir="${dir.build.testresults}">
<fileset dir="${dir.src.tests}">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
</junit>
Ответ 7
Применить эту аннотацию к другим классам org.junit.Ignore
Ответ 8
Я также попытался выполнить тесты с JUnit 4.0 без JUnit4TestAdapter, т.е. без метода public static junit.framework.Test suite() { вернуть новый JUnit4TestAdapter (SomeTestClass.class); }
Я использую ant 1.9.4.
Запуск ant test verbose (ant -v) показывает
[junit] Выполнение нескольких тестов в одной виртуальной машине
[junit] Неявно добавление /usr/share/java/junit.jar:/usr/sharejava/ant -launcher.jar:/usr/share/java/ant.jar:/usr/share/java/ant/ant -junit.jar для CLASSPATH
Ага, но все же существует некоторая ant -junit-задача.
Скачивая это, кроме того,
/usr/share/java/ ant/ant-junit4.jar, который не добавляется неявно.
Я просто добавил его явно:
<junit printsummary="yes"
fork="yes"
forkmode="once"
maxmemory="1023m"
showoutput="no">
...
<classpath>
<pathelement path="...:${junitJar}:${hamcrestJar}:/usr/share/java/ant/ant-junit4.jar" />
</classpath>
...
</junit>
и это сработало. Без: нет.
Я знаю, что это решение совсем не красиво...
Ответ 9
То, что я закончил, заключалось в добавлении Ant к одному из моих определений, которое используется задачей > . Et voila.