Как я могу переключаться между двумя тестовыми наборами в Maven 2? - PullRequest
4 голосов
/ 02 марта 2012

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

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 02 марта 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>
1 голос
/ 02 марта 2012

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

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

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

<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>
...