是否可以使用跳过方法隔离故障安全和surefire?

时间:2015-07-17 11:15:55

标签: maven maven-surefire-plugin maven-failsafe-plugin

如果与skipITs一起使用,maven会忽略在命令行上覆盖的属性-Dit.test=full.Classname的值。不会运行指定的故障安全测试(案例一)。

与没有skipITs开关的此特定it.test相反,导致运行现有的故障安全测试(案例二)。

背景:我试图将surefire测试与故障安全测试运行隔离,即运行它们的两种类型或仅运行其中一种。 maven的电话是:

mvn -Pintegration -DskipTests=true -DskipITs=false -Dit.test=full.Classname verify

在第一种情况下:

mvn -Pintegration -DskipTests=true -DskipITs=false verify

在第二个。

相关配置(pom.xml,仅限片段)为:

<properties>
    <skipTests>false</skipTests>
    <skipITs>false</skipITs>
</properties>

(这些是默认值)和

<profiles>
    <profile>
        <id>integration</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>custom<id>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                            <configuration>
                                <skipTests>${skipITs}</skipTests>
                                <skip>${skipITs}</skip>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

您是否也观察过这种情况,或者您最终找到了更好的工作方法?

2 个答案:

答案 0 :(得分:1)

默认情况下,Surefire插件在测试阶段运行,通常您将Failsafe插件配置为在集成测试和验证阶段运行,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.18.1</version>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

要仅运行Surefire测试,请使用

mvn clean test

要同时运行Surefire和Failsafe测试,请使用

mvn clean verify

您可以使用<skip>配置选项完全跳过任何插件。如果您配置Surefire插件,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <skip>${skip.surefire}</skip>
    </configuration>
</plugin>

您只能通过调用

运行Failsafe测试
mvn clean verify -Dskip.surefire=true

答案 1 :(得分:0)

如果集成测试(it.test)具有非默认名称,我需要相应地添加include模式,例如(pom.xml片段):

<profiles>
    <profile>
        <id>dbUnit</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>custom</id>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                            <configuration>
                                <skipTests>${skipITs}</skipTests>
                                <skip>${skipITs}</skip>
                                <includes>
                                    <include>**/*DbTest.java</include>
                                </includes>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

但这似乎只适用于原始方法。另请注意,如果您的集成测试遵循不同的命名方案,则可能还需要添加默认包含模式。