Maven: Как обойти обход Surefire -Dtest включает и исключает? - PullRequest
1 голос
/ 25 октября 2011

У меня два безошибочных исполнения в одном профиле - им нужен другой конфиг.Когда я запускаю -Dtest = ..., соответствующий тест запускается дважды - по одному разу для каждого выполнения.

Как я могу выполнить тест только один раз?Или лучше, как я могу убедиться в том, что последующие действия включаются и исключаются?(Одно выполнение будет запускать 0 тестов; я бы использовал -DfailIfNoTest = false.)

    <profile>
        <id>clustering.integration.tests.profile</id>
        <activation>
            <property>
                <name>clustering.integration.tests</name>
                <value>true</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <executions combine.children="append">

                        <!-- Disable default-test execution. -->
                        <execution>
                            <id>default-test</id>
                            <goals><goal>test</goal></goals>
                            <phase>none</phase>
                        </execution>

                        <!-- Single node clustering tests. -->
                        <execution>
                            <id>tests-clustering-single-node.surefire</id>
                            <phase>test</phase>
                            <goals><goal>test</goal></goals>
                            <configuration>
                                <includes>
                                    <include>org/jboss/as/test/clustering/single/**/*TestCase.java</include>
                                </includes>
                            </configuration>
                        </execution>

                        <!-- Multi node clustering tests. -->
                        <execution>
                            <id>tests-clustering-multi-node.surefire</id>
                            <phase>test</phase>
                            <goals><goal>test</goal></goals>
                            <configuration>
                                <includes>
                                    <include>org/jboss/as/test/clustering/cluster/**/*TestCase.java</include>
                                </includes>
                            </configuration>
                        </execution>

                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Это звучит как неправильное использование maven-surefire-plugin , потому что у вас, похоже, были какие-то интеграционные тесты, которые должен выполнить maven-failsafe-plugin вместо. Используя их, вы автоматически получаете различные конфигурации для модульных и интеграционных тестов. Плагин maven-surefire-plugin предназначен для запуска модульных тестов, тогда как плагин maven-failsafe-plugin предназначен для запуска интеграционных тестов. Кроме того, ваша конфигурация выглядит так, как будто вам нужны различные виды интеграционных тестов, что означает, что нужно иметь несколько модулей интеграционных тестов.

 +-- pom.xml
 +-- module-1
 +-- module-2
 +-- integration-test-single-node
 +-- integration-test-multi-node
 ...

И это будет лучше всего иметь разные конфигурации для интеграционных тестовых прогонов.

1 голос
/ 13 марта 2012

Версия 2.12 maven-surefire-plugin имеет исправление для этой проблемы.(См. http://jira.codehaus.org/browse/SUREFIRE-806)

Описание изменений, добавленных в v2.12: Цитируется из комментария Джона Кейси по ссылке JIRA выше:

Также в случаях, когда есть несколько выполнений тестаблоки, чтобы избежать запуска указанного теста в неправильном блоке, существующие учитываются / исключаются, теперь учитываются ... указанные тесты теперь действуют как уточняющий фильтр для этих включений / исключений. Это означает, что в случаях, когда есть несколькоблоки выполнения, вы не можете запустить тест, который обычно не запускается, просто используя -Dtest = ... больше.

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

...