3

每次构建都运行单元测试但完全跳过集成测试阶段是否明智 - 将其留给 CI 服务器?

目前我正在开发一个 JavaEE 项目,该项目几乎只包含一些集成测试,这些测试写得不好并且需要很多时间。每次我进行任何更改时,我都必须等待几分钟才能构建(大约 90% 的时间是这些集成测试)。

我的想法是配置一些 CI 服务器,例如 Jenkins,以便它可以获取对存储库的任何提交(或者在 maven 构建之后更好)并运行带有集成测试的 maven 构建。但是是否可以配置 maven,当我输入mvn install它时,它会编译-运行单元测试-构建项目,但完全省略集成阶段(以加快开发速度)。然后 CI 会重新开始并开始运行构建,但这一次集成测试到位了吗?

这样,更改一些代码和部署之间的时间会更短,也不会那么令人沮丧,并且任何与集成相关的错误都将在 CI 服务器完成构建后的几分钟内被缓存起来。

这是一个好主意吗?谁能建议如何配置 Maven 来获得这种行为?

4

2 回答 2

4

您应该能够使用配置文件执行此操作。尽管我可能需要有关您的集成测试配置的更多信息。多年来,我一直在使用 maven-failsafe-plugin 和配置文件的组合来处理项目。这是来自 pom 的示例片段:

<profiles>
    <profile>
        <id>integration-tests</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>integration-test</id>
                            <goals>
                                <goal>integration-test</goal>
                            </goals>
                            <configuration>
                                ...
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

在正常的本地开发过程中,运行mvn install不应运行通过 maven-failsafe-plugin 运行的集成测试。然后,您可以将 CI 服务器配置为运行mvn clean install -Pintegration-tests.

于 2013-02-16T09:10:48.603 回答
1

首先,我认为这是一个好主意。这将使您的开发周期更快。

我不知道在执行 mvn install 时完全省略集成测试阶段的方法。您可以在开发过程中执行“mvn clean package”吗?如果这不是一个选项,您使用什么插件进行集成测试?大多数插件都有一个属性“skip”,您可以使用它来跳过插件的执行。您可能希望使用配置文件来为不同的场景打开和关闭“跳过”。

于 2013-02-16T07:57:10.900 回答