Как я могу переключаться между двумя наборами тестов в Maven 2?

Мы используем maven-surefire-plugin для запуска тестов Java. Тесты делятся на две категории:

  • Быстрые тесты
  • Медленные тесты

Весь «быстрый» набор выполняется за пару секунд, а медленные тесты занимают полчаса.

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

На сервере CI я хочу запустить оба.

Это нормально (и даже желательно), когда медленные тесты включают в себя быстрые.

Как мне настроить Maven, JUnit и Surefire для этого сценария?


person Aaron Digulla    schedule 02.03.2012    source источник


Ответы (2)


В коммерческом проекте, который я сделал с нуля самостоятельно, я разделил тесты на модульные (которые я назвал *Test.java) и интеграционные (*IT.java), соответственно, в соответствии с политиками плагинов Surefire и Failsafe, которые я использовал для запуска тестов. . ИТ работают, конечно, намного медленнее, чем UT.

Это дает возможность запуска группы тестов простыми командами: mvn test для УТ и mvn integration-test для УТ и ИТ, а также возможность пропуска только ИТ с mvn install -DskipITs.

Еще одна хорошая вещь — это возможность быть менее строгим с результатами интеграционных тестов, так как они терпят неудачу чаще, чем модульные тесты, из-за проблем с окружением (т. е. база данных слишком долго запускается, брокер сообщений отключается слишком рано и т. д.). . По умолчанию сбой теста Failsafe не уничтожает сборку, если только вы явно не указали цель «проверить»:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>integration-test</id>
            <goals>
                <goal>integration-test</goal>
            </goals>
        </execution>
        <!-- Uncomment this in order to fail the build if any integration test fail -->
        <!-- execution> <id>verify</id> <goals><goal>verify</goal></goals> </execution -->
    </executions>
</plugin>
person MaDa    schedule 02.03.2012

Вы должны использовать категорию из junit: категория Junit

Первое решение

Настроить maven-surefire-plugin версию не ниже 2.11

     <profile>
                    <id>normal</id>
                    <activation>
                            <activeByDefault>true</activeByDefault>
                    </activation>
                    <build>
                            <plugins>
                                    <plugin>
                                            <groupId>org.apache.maven.plugins</groupId>
                                            <artifactId>maven-surefire-plugin</artifactId>
                                            <configuration>
                                                    <excludedGroups>com.test.SlowTests</excludedGroups>
                                            </configuration>
                                    </plugin>
                            </plugins>
                    </build>
            </profile>

Второе решение

В разделе конфигурации вы можете добавить регулярное выражение с файлами для поддержки только классов (конфигурация по умолчанию):

           <configuration>
                <includes>
                    <include>**/*Test*.java</include>
                    <include>**/*Test.java</include>
                    <include>**/*TestCase.java</include>
                </includes>
            </configuration>
person Andrzej Jozwik    schedule 02.03.2012