Запуск "чистого" теста JUnit 4 с использованием ant - PullRequest
23 голосов
/ 11 марта 2009

Мы перешли на JUnit 4 и ant 1.7

В затмении тесты выполняются нормально, но аннотации игнорируются при запуске тестов с использованием ant.

В соответствии с заданием Ant junit Документация :

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

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

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

Ответы [ 9 ]

14 голосов
/ 11 марта 2009

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

7 голосов
/ 22 марта 2012

Ant поставляется с версией JUnit 3 по умолчанию. JUnit 3 не поддерживает тестовые аннотации.

Чтобы использовать аннотации JUnit 4 из задачи junit, убедитесь, что вы указали расположение Jar-файла JUnit 4 во вложенном элементе classpath задачи junit (см. эту запись в 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>

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

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

3 голосов
/ 06 августа 2014

Наконец, вы можете только найти и выполнить тесты с параметром 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>
2 голосов
/ 21 марта 2012

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

1 голос
/ 28 февраля 2012

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

<path id="classpath" description="Classpath do Projeto">
    <fileset dir="${LIB}">
        <include name="**/*.jar" />
        <exclude name="**/.SVN/*.*"/>
    </fileset>
</path>
0 голосов
/ 29 апреля 2016

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

Я использую муравей 1.9.4. Выполнение многословного теста ant (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

Ага, но все-таки есть какая-то муравьиная задача. Загрузка этого шоу в дополнение /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>

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

0 голосов
/ 13 декабря 2010

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

0 голосов
/ 02 сентября 2009

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

0 голосов
/ 11 марта 2009

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

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