Как пропустить предварительную интеграцию-тест фазы maven, если установлены скипы?

У меня есть некоторые интеграционные тесты, которые зависят от тестовых данных. Эти тестовые данные создаются в фазе 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>

Ответ 1

Вы можете использовать профиль, активированный присутствием параметра 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>

Ответ 2

Лучше всего использовать свойство 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, она также пропустит тест интеграции, а также выполнение этого плагина.