从测试阶段排除带有集成测试的maven模块

时间:2013-10-25 16:02:29

标签: maven integration-testing

我有一个带有结构的多模块maven项目

parent
  pom.xml
module
  pom.xml
  core-api
    pom.xml
  integ-tests
    pom.xml

我有maven surefire插件设置,用于执行'core-api'模块中的单元测试'* Test.java'。

我们在一个单独的“整合测试”模块中进行了长时间运行的慢速集成测试。我们也使用'* Test.java'进行集成测试。

我们需要能够编译所有源代码,但希望排除'整合测试'作为默认maven'测试'阶段的一部分运行。我们计划使用配置文件来启用“集成测试”模块的测试阶段。我不想使用'failsafe'插件。

概述组合的矩阵在这里

mvn              | core           | integ-test
test             | run unit tests | exclude
test -PintegTest | unit tests     | integ tests 

我在父pom中定义了surefire插件,其属性为'skip.integ.tests',将通过配置文件'-PintegTests'进行控制。

<properties>
  <skip.integ.tests>true</skip.integ.tests>
</properties>
..
<build>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
  </plugin>
</build>
..
<profiles>
  <profile>
    <id>integTests</id>
    <properties>
      <skip.integ.tests>false</skip.integ.tests>
    </properties>
  </profile>
</profiles>

在我的'integ-test'pom中,我已经覆盖'maven-surefire-plugin'配置,并设置'skipTests'配置来查看属性的值。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <skipTests>${skip.integ.tests}</skipTests>
      </configuration>
    </plugin>
  </plugins>
</build>

我的问题是在每种情况下运行的集成测试模块测试。关于我在设置方面出错的任何想法?

2 个答案:

答案 0 :(得分:0)

首先,您应该根据旨在运行集成测试的naming conventionsmaven-failsafe-plugin来命名集成测试。此外,预集成测试集成测试集成后测试 life cycle phases用于运行这些测试。这意味着在您的情况下,根据这样的文档配置maven-failsafe-plugin。 maven-failsafe-plugin绑定到集成测试生命周期阶段。

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.16</version>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

我建议将以下配置文件添加到您的集成测试模块中,如下所示:

<profiles>
  <profile>
    <id>run-its</id>
    <build>
      <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.16</version>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
  </profile>
</profiles>

这为您提供了以下选项:

  • mvn test

    仅运行单元测试

  • mvn -DskipTests=true test

    正在运行编译等但没有单元测试。

  • mvn -Prun-its verify

    运行包装等单元测试和集成测试

  • mvn install

    在没有集成测试的情况下运行安装。

  • mvn -DskipTests=true install

    在不运行单元测试或集成测试的情况下运行安装。

答案 1 :(得分:0)

在Maven构建中,您可以排除:

  • 通过添加-Dmaven.skip.test=true
  • 编译和执行单元测试(通过Surefire插件)和集成测试(通过Failsafe插件)
  • 通过-DskipTests
  • 执行单元测试和集成测试
  • 通过-DskipITs
  • 执行集成测试

相反,如果您在单独的Maven模块中进行集成测试(即在您的情况下进行集成测试),您可以通过配置文件直接将其从Maven构建中排除,如下例所示 - 请参阅聚合器的pom提取。要启动的xml和maven命令行:

<modules>
  <!-- remove 'integ-test' from this list -->
</modules>
<profiles>
    <profile><id>build-it</id>
        <activation><activeByDefault>true</activeByDefault></activation>
        <modules><module>integ-test</module></modules>
    </profile>
</profiles>

然后mvn install -P !build-it