【问题标题】:Is isolation of failsafe and surefire runs from each other using a skip approach possible?是否可以使用跳过方法将故障安全和万无一失的运行相互隔离?
【发布时间】:2015-07-17 11:15:55
【问题描述】:

如果与-Dit.test=full.Classname 结合使用,在命令行上重写属性skipITs 的值似乎会被maven 忽略。指定的故障安全测试将不会运行(情况一)。

与不带it.test 开关的这种指定skipITs 不同,会导致运行现有的故障安全测试(情况二)。

背景:我试图将安全测试与故障安全测试隔离开来,即运行两种类型或仅运行一种。 Maven 调用是:

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

在第一种情况下:

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

在第二个。

相关配置(pom.xml,sn-ps only)为:

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

您是否也观察到了这一点,或者您最终找到了更好的工作方法?

【问题讨论】:

  • 为什么不使用插件提供的默认值。 -DskipITs=true 跳过 maven-failsafe-plugin 的集成测试,-DskipTests=true 跳过 maven-surefire-plugin 的单元测试。为什么要定义属性?
  • @khmarbaise -DskipTests=true 也会阻止 Failsafe 插件执行任何测试。 OP 想跳过 Surefire 但运行 Failsafe。

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


【解决方案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

您可以使用&lt;skip&gt; 配置选项完全跳过任何插件。如果你像这样配置 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>

您只能通过调用来运行故障安全测试

mvn clean verify -Dskip.surefire=true

【讨论】:

    【解决方案2】:

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

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

    但这似乎只对原始方法有效。另请注意,可能还需要添加默认包含模式,以防您的集成测试遵循不同的命名方案。

    【讨论】:

    • 您应该使用已经是 maven-surefire/maven-failsafe 中默认的命名约定,而不是使用包含等。
    • Maven 是关于约定优于配置的。 @khmarbaise 是对的,不要因为不遵守约定而让你的生活变得艰难!此外,Stackoverflow 不像传统的讨论板那样工作。有一个问题,其他一切都应该只是该问题的答案。可以在聊天中进行讨论。
    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多