Запускать тесты из категории @ с помощью Maven - PullRequest
0 голосов
/ 07 декабря 2011

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

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

Интерфейс категории:

public interface FastTest{}

Категорияsuite:

@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

или

mvn test -Dtest.suite=FastSuite

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

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011

Вы можете сделать это из плагина 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.

0 голосов
/ 08 декабря 2011

Провел немного больше исследований и не нашел вариантов, поэтому в итоге я использовал 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
...