Подтвердить что ты не робот

Выполнение "чистых" тестов JUnit 4 с использованием ant

Мы переместились на JUnit 4 и ant 1.7

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

В соответствии с задачей ant junit :

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

Однако в документации не указано, как ее настроить.

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

4b9b3361

Ответ 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.