Как запустить все тесты JUnit в категории / наборе с Ant? - PullRequest
22 голосов
/ 03 июня 2011

Я использую JUnit Categories и ClassPathSuite в настройке, аналогичной описанной в в этом ответе .Напомним:

public interface FastTests {
}

@RunWith(Categories.class)
@Categories.IncludeCategory(FastTests.class)
@Suite.SuiteClasses(AllTests.class)
public class FastTestSuite {
}

@RunWith(ClasspathSuite.class) 
public class AllTests {
}

... где AllTests использует библиотеку ClasspathSuite .

Тестовый класс, который входит в категорию FastTests, будет выглядеть следующим образом:

@Category(FastTests.class)
public class StringUtilsTest {
    //  ...
}

Когда я запускаю "FastTestSuite" в моей IDE, все тесты с аннотацией FastTests выполняются, хорошо иsmooth:

enter image description here

Теперь, Я хочу сделать то же самое с Ant .(К моему удивлению, я не мог легко найти инструкции для этого в SO.) Другими словами, мне нужна цель Ant, которая запускает все тесты с аннотацией FastTests.

Я пробовал несколько упрощенных подходов, используя <test> или <batchtest> ...

 <junit showoutput="true" printsummary="yes">
     <test name="fi.foobar.FastTestSuite"/>
     <formatter type="xml"/>
     <classpath refid="test.classpath"/>
 </junit>

... но пока не повезло.

Редактировать : Помимо IDE, он отлично работает с JUnitCore в командной строке:

$ java -classpath "classes:WebContent/WEB-INF/lib/*" org.junit.runner.JUnitCore fi.foobar.FastTestSuite
.............
Time: 0.189

OK (13 tests)

Ответы [ 2 ]

14 голосов
/ 06 июня 2011

Правильно, у меня это работает с <batchtest> довольно просто:

<junit showoutput="true" printsummary="yes" fork="yes">
    <formatter type="xml"/>
    <classpath refid="test.classpath"/>
    <batchtest todir="${test.reports}">
        <fileset dir="${classes}">
            <include name="**/FastTestSuite.class"/>
        </fileset>
    </batchtest>
</junit>

Я пытался <batchtest> ранее, но совершил глупую ошибку, используя "**/FastTestSuite.java" вместо "**/FastTestSuite.class" в элементе <include> ... Извините за это: -)

NB : необходимо установить fork="yes" (т.е. запустить тесты в отдельной виртуальной машине); в противном случае это также приведет к «initializationError» в java.lang.reflect.Constructor.newInstance (Constructor.java:513), например <test> (см. комментарии к вопросу). Однако я не мог заставить <test> работать даже с fork="yes".

Единственный недостаток заключается в том, что он создает только один файл отчета JUnit XML (TEST-fi.foobar.FastTestSuite.xml), из-за чего все (сотни) тестов выглядят как один FastTestSuite). Если кто-нибудь знает, как настроить это, чтобы показать тесты в их оригинальных классах и пакетах, пожалуйста, дайте мне знать.

2 голосов
/ 02 февраля 2017

Я нашел обходной путь, чтобы использовать задачу junit муравья для запуска теста определенного Category:

<target name="test" description="Run Selenium tests by category">
    <fail unless="category.name" message="Please specify 'category.name' property"/>

    <junit showoutput="true" printsummary="true" fork="true">
        <formatter type="xml"/>
        <classpath refid="test.classpath"/>

        <batchtest todir="${test.reports}" haltonfailure="false">
            <fileset dir="${classes}">
                <!-- regex '^\s*@Category' part added to ensure @Category annotation is not commented out -->
                <containsregexp expression="^\s*@Category.*${category.name}"/>
            </fileset>
        </batchtest>
    </junit>
</target>

Выполнить тест, предоставив муравью свойство category.name следующим образом:

ant -Dcategory.name=FastTests test

Использование batchtest также приведет к созданию отдельных файлов отчетов JUnit XML для теста (например, TEST-fi.foobar.FastTestClassN.xml).

...