2009-03-11 4 views
22

Мы мигрировали как JUnit 4 и муравей 1.7Запуск «чистые» JUnit 4 тестов с использованием муравья

Тестов работают нормально в затмении, но аннотации игнорируются при запуске тестов с помощью муравьев.

Согласно Ant JUnit задачи documentation:

Он также работает с JUnit 4.0, в том числе "чистый" JUnit 4 тестов с использованием только аннотаций и не JUnit4TestAdapter.

Но документация не уточняет, как ее настроить.

Есть ли какие-либо специальные настройки для задачи junit? Я что-то упускаю? У нас есть обе тесты, которые расширяют TestCase (т. Е. Стиль 3.8) и «чистые» тесты Junit 4, может быть, проблема?

ответ

14

Я использую чистые тесты 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

Таким образом, нет возможности избежать использования шаблона именования для тестовых классов (например, «* Test.java»), хотя JUnit 4 не требует что? – Jonik

+0

@jonik Вам не нужно использовать шаблон именования, но это поможет вам избежать запуска JUnit против любых дополнительных классов, которые у вас есть, которые не содержат тестов, которые находятся в том же пакете, что и ваши тестовые классы. Подобные классы будут давать ошибки в выходе JUnit. – MikeD

+3

Что делать, если у вас есть классы утилит, которые имеют тест в начале, но которые не являются тестовыми классами? Обычно «использование JUnit 4» означает «тесты аннотаций @Test, а не имя класса». Должно быть возможным включить все .java-файлы и заставить их запускать только те, в которых есть тесты. – Trejkaz

0

Это важная часть моего универсального сценария муравья ... не уверен, что это поможет вам или нет.

<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> 
-1

Что я в итоге сделал, добавляя Ant к одному из моих определений, которое используется задачей>. И вуаля.

0

Примените это аннотация к другим классам org.junit.Ignore

1

Проверьте свое определение ... пути к классам это решить мою проблему.

<path id="classpath" description="Classpath do Projeto"> 
    <fileset dir="${LIB}"> 
     <include name="**/*.jar" /> 
     <exclude name="**/.SVN/*.*"/> 
    </fileset> 
</path> 
2

Это случилось со мной, и это произошло потому, что я использовал аннотации и расширил 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.

6

Ант-корабли с версией JUnit 3 по умолчанию. JUnit 3 не поддерживает тестовые аннотации.

Чтобы использовать аннотации JUnit 4 из задачи junit, убедитесь, что вы предоставили местоположение Jarit 4 jar в вложенном элементе classpath задачи junit (см. this entry in the ant FAQ).

<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> 

Это предпочтительное решение для перезаписи муравья-junit.jar в ANT_HOME/Lib, поскольку это означает, что вы можете держать JUnit банку в системе управления версиями вместе ваш код делает обновление до более поздних версий простых.

Обратите внимание, что пока я не указал шаблон включения в свой набор файлов выше этого, это означает, что задача junit попытается запустить JUnit для всех классов в этой структуре каталогов, что может привести к включению ряда классов, которые не содержат никаких тестов в зависимости от того, как вы структурировали исходные файлы.

+0

У меня точно такая же проблема в Debian: ant 1.8.0, junit 4.10, путь к junit-4.10.jar добавлен как часть задачи junit, но аннотация @Task не распознается, только переименование методов для начала с теста * работает ... –

+0

@ MenelaosPerdikeas Вы имели в виду '@ Task'? Я ожидаю, что вы будете использовать '@ Test' в качестве аннотации. Предполагая, что вы используете '@ Test', попробуйте запустить ant с флагом -v, а вывод задачи junit будет показывать путь к классам. Затем вы можете убедиться, что в класс junit-4.10.jar указан путь к вашей задаче. Я обнаружил, что он очень полезен при попытке диагностировать эту проблему. – MikeD

+0

У меня был именно этот элемент '', за исключением опции 'fork =" true ". Добавление этой опции разрешило это для меня. – Darkhogg

3

Вы можете, наконец, найти и выполнить тесты с помощью параметра skipNonTests, добавленного в ant 1.9.3+!

Это фрагмент кода из принятого ответа выше (для новых skipNonTests параметров и избавившись от «Test» в требовании имени файла за исключением):

<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> 
+0

Да, здорово, что они, наконец, добавили это. Теперь, если бы они могли просто исправить все-else-in-Ant, Ant мог бы стать хорошим инструментом. Ха-ха. – Trejkaz

0

Я также пытался делать анализы с JUnit 4.0 без JUnit4TestAdapter, т.е. без метода
public static junit.framework.Test suite() { возвращает новый JUnit4TestAdapter (SomeTestClass.class); }

Я использую ant 1.9.4. Запуск теста муравей многословным (муравей -v) показывает

[JUnit] Запуск нескольких тестов в одной и той же В.М.
[JUnit] Косвенно добавление /usr/share/java/junit.jar:/usr/sharejava/ муравей-launcher.jar: /usr/share/java/ant.jar: /usr/share/java/ant/ant-junit.jar в CLASSPATH

Aha, но все же есть некоторые муравей-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> 

, и она работала. Без: нет. Я знаю, что это решение совсем не красиво ...

Смежные вопросы