Запуск тестов из @Category с помощью Maven

Я рассмотрел несколько других вопросов SO, таких как this и this. Но эти вопросы довольно устарели, и мне любопытно, существует ли новое решение.

Вот как выглядит моя установка:

Категория интерфейса:

public interface FastTest{}

Категория люкс:

@RunWith(Categories.class)
@IncludeCategory(FastTest.class)
public class FastSuite{}

Образец теста:

@Category(FastTest.class)
public class FastTests{

    @Test public void assertOneFastTest(){}

    @Test public void assertTwoFastTest(){}
}

Используя maven, допустим, я хочу запускать только все мои FastTest тесты. В идеале я бы использовал команду

mvn test -Dtest.category=FastTest

or

mvn test -Dtest.suite=FastSuite

Но мне не удалось заставить это работать. Есть ли у кого-нибудь предложения, кроме использования ClasspathSuite? Спасибо.


person jamesfzhang    schedule 07.12.2011    source источник


Ответы (2)


Вы можете сделать это из плагина surefire, используя конфигурацию для групп, но вам также необходимо указать поставщика junit47. Для меня работает следующее:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.11</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>2.11</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <id>default-test</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <groups>com.xxx.foo.CategoryClass</groups>
    </configuration>
</plugin>

Я думаю, что это было введено относительно недавно, поэтому может не работать в более ранних версиях плагина, до 2.11. Вам нужно указать провайдера, иначе он не сработает. Группы должны быть полным именем класса Category. Вы также можете указать excludeGroups, если это необходимо.

Для получения дополнительной информации см. Maven Surefire Plugin surefire: test .

person Matthew Farwell    schedule 07.12.2011
comment
ОГРОМНОЕ спасибо за подсказку по поводу юнит-провайдера !!! В отличие от того, что задокументировано, он должен был быть выбран автоматически. Но это явно не так. - person Jan Goyvaerts; 09.02.2012
comment
@JanGoyvaerts re: поставщик junit, я уже поднимал вопрос по этому поводу. Это должно быть исправлено в 2.12.1, но мне нужен патч :-) - person Matthew Farwell; 09.02.2012
comment
Я наконец-то заставил его работать, явно запросив поставщика junit47. Боюсь, что с отказоустойчивостью есть та же проблема. - person Jan Goyvaerts; 09.02.2012
comment
На всякий случай ... билет, который я поднял на Surefire jira.codehaus.org/browse/SUREFIRE- 832. Но думаю проблема со стабильностью где-то и с провайдером. Система почти останавливается при использовании для Surefire и Failsafe. - person Jan Goyvaerts; 09.02.2012

Провел еще немного исследований и не нашел вариантов, поэтому в итоге я использовал ClasspathSuite. Оказывается, все ничем не отличается, за исключением того, что вы не можете указать @Category на уровне класса, вы должны аннотировать каждый метод, который хотите классифицировать

Теперь набор каждой категории выглядит так:

@RunWith(Categories.class)
@Categories.IncludeCategory(FastTest.class)
@Suite.SuiteClasses(AllTests.class)
public class FastSuite{}

Вы должны изменить AllTests, чтобы он выглядел так:

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

Для методов это выглядит так:

public class FastTests{

    @Categories(FastTest.class)
    public void assertOneFastTest(){}

    @Categories(FastTest.class)
    public void assertTwoFastTest(){}
}

Используя maven, вы можете выполнить следующую команду:

mvn test -Dtest=FastSuite -Dt3-chrome-path=%CHROME_DRIVER_HOME -Dwebdriver.chrome.driver=%CHROME_DRIVER_HOME
person jamesfzhang    schedule 07.12.2011
comment
Это не связано напрямую, но это способ вычислить счетчик «Тесты по категориям». - person Bsquare ℬℬ; 18.01.2019