Как пропустить тест предварительной интеграции maven, если установлен skipITs?

У меня есть несколько интеграционных тестов, которые зависят от тестовых данных. Эти тестовые данные создаются в фазе pre-integration-test и удалены в фазе post-integration-test,

Моя проблема в том, что эти фазы все еще выполняются, если я использую -DskipITs на командной строке Maven.

Есть ли способ сделать -DskipITs также пропустить этапы до и после тестирования?

Это определение плагина в pom:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>

<configuration>
    <driver>com.mysql.jdbc.Driver</driver>
    <url>${database.url}</url>
    <username>${database.user}</username>
    <password>${database.pw}</password>
</configuration>

<executions>
    <execution>
        <id>create-integration-test-data</id>
        <phase>pre-integration-test</phase>
        <goals>
            <goal>execute</goal>
        </goals>
        <configuration>
            <orderFile>descending</orderFile>
            <fileset>
                <basedir>${basedir}/src/test/resources/sql</basedir>
                <includes>
                    <include>AdministrationTestTeardown.sql</include>
                    <include>AdministrationTestSetup.sql</include>
                </includes>
            </fileset>
        </configuration>
    </execution>

    <execution>
        <id>remove-data-after-test</id>
        <phase>post-integration-test</phase>
        <goals>
            <goal>execute</goal>
        </goals>
        <configuration>
            <fileset>
                <basedir>${basedir}/src/test/resources/sql</basedir>
                <includes>
                    <include>AdministrationTestTeardown.sql</include>
                </includes>
            </fileset>
        </configuration>
    </execution>
</executions>
</plugin>

2 ответа

Решение

Вы можете использовать профиль, активированный по наличию skipITs и <skip> опция плагина Maven, чтобы полностью пропустить выполнение плагина. Есть несколько способов сделать это.


Установите свойство, чтобы проверить позже

Вы можете установить свойство Maven внутри профиля, а затем использовать это свойство для пропуска действий.

<profiles>
    <profile>
        <id>skip-integration-test-data-creation</id>
        <activation>
            <property>
                <name>skipITs</name>
            </property>
        </activation>
        <properties>
            <skip-integration-test-data-creation>true</skip-integration-test-data-creation>
        </properties>
    </profile>
</profiles>

-

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>sql-maven-plugin</artifactId>
    ...
    <skip>${skip-integration-test-data-creation}</skip>
    ...
</plugin>

Поместите плагины в свой профиль

Другое решение состоит в том, чтобы поставить все <plugin> разделы, которые не должны попадать в отдельный профиль, и отключать этот профиль, когда -DskipITs активен

<profiles>
    <profile>
        <id>skip-integration-test-data-creation</id>
        <activation>
            <property>
                <!-- Disable profile if skipITs is set -->
                <name>!skipITs</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
<!-- Here: All plugins that should not run if skipITs is set -->
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Лучше использовать свойство skipITs, чтобы пропустить выполнение этапов как до, так и после интеграции.

В вашем случае это будет выглядеть так:

<executions>
    <execution>
        <id>create-integration-test-data</id>
        <phase>pre-integration-test</phase>
        <goals>
            <goal>execute</goal>
        </goals>
        <configuration>
            <skip>${skipITs}</skip>
            <orderFile>descending</orderFile>
            <fileset>
                <basedir>${basedir}/src/test/resources/sql</basedir>
                <includes>
                    <include>AdministrationTestTeardown.sql</include>
                    <include>AdministrationTestSetup.sql</include>
                </includes>
            </fileset>
        </configuration>
    </execution>

    <execution>
        <id>remove-data-after-test</id>
        <phase>post-integration-test</phase>
        <goals>
            <goal>execute</goal>
        </goals>
        <configuration>
            <skip>${skipITs}</skip>
            <fileset>
                <basedir>${basedir}/src/test/resources/sql</basedir>
                <includes>
                    <include>AdministrationTestTeardown.sql</include>
                </includes>
            </fileset>
        </configuration>
    </execution>
</executions>

Таким образом, всякий раз, когда вы запускаете команду mvn с параметром -DskipITs, она пропускает интеграционный тест, а также выполнение этого плагина.

Другие вопросы по тегам