当前位置: 首页 > 知识库问答 >
问题:

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

齐航
2023-03-14

我有一个多模块的maven项目

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

我有maven surefire插件设置,用于执行单元测试“*测试。“核心api”模块中包含java。

我们在一个单独的“集成测试”模块中进行了缓慢的长时间运行的集成测试。我们使用“*测试。java也用于我们的integ测试。

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

组合的矩阵在这里

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

我已经在我的父pom中定义了surefire插件,带有属性“skip.integ.tests”,它将通过配置文件“-PintegTest”进行控制

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

我的问题是integ测试模块测试在任何情况下都会运行。你知道我的设置哪里出了问题吗?

共有2个答案

尉迟京
2023-03-14

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

  • 通过添加-Dmaven.skip来编译和执行单元测试(通过Surefire插件)和集成测试(通过故障保护插件)。测试=真

相反,如果您将集成测试放在单独的Maven模块中(即在您的案例中为intg-test),您可以通过配置文件直接将其从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

司徒耀
2023-03-14

首先,您应该根据用于运行集成测试的maven故障保护插件的命名约定来命名集成测试。此外,集成前测试、集成测试和集成后测试生命周期阶段旨在运行这些测试。这意味着在您的案例中,根据这样的文档配置maven故障保护插件。maven故障保护插件绑定到集成测试生命周期阶段。

<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-DskipTests=真实测试

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

mvn-修剪其验证

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

mvn安装

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

mvn-DskipTests=true安装

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

 类似资料:
  • 运行似乎surefire没有执行其测试目标(或者至少没有选择我在配置中包含的测试)。 这是一个多模块maven项目,目前全部在groovy中,其结构类似于以下内容: 我在pom中有以下surefire配置。xml: 但是,当我针对这个pom执行

  • 英文原文:http://emberjs.com/guides/testing/integration/ 集成测试通常用来测试应用中得重要工作流。集成测试用来模拟用户交互和确认交互结果。 设置 为了对Ember应用进行集成测试,需要在测试框架中运行应用。首先需要将根元素(root element)设置为任意一个已知将存在的元素。如果根元素在测试运行时可见的话,这对测试驱动开发非常有用,带来的帮助非常

  • 我有一个编译和运行时所需的依赖项,但我想在运行测试时将其排除。这可能吗?也许,通过设置个人资料?但是,如何仅在生命周期阶段停用它?

  • 如何模拟集成测试所需的许多依赖关系? 我使用Mockito进行纯单元测试。在这种情况下,Pure意味着测试一个类,嘲笑它的所有依赖关系。漂亮。 现在是集成测试。假设在这种情况下,集成测试将测试以下内容: 消息被放入队列 我们也可以说,在第2步中发生的处理是严肃的事情。它依赖于大量的数据库交互、多种外部服务、文件系统,以及各种各样的东西。流还会引发很多副作用,所以我不能简单地确保响应是正确的——我需

  • 我在单元测试用例中使用Mockito和Power Mockito。当我运行配置文件代码时,我能够生成jacoco报告,但是 当我在测试阶段试图生成Jacoco报告时,我遇到了错误 错误[错误]无法执行目标组织。jacoco:jacoco maven插件:0.8.2:project testproject api上的报告(默认报告):生成jacoco报告时出错:创建报告时出错:分析d:\worksp

  •  Selenium 能被选为最好集成测试、回归测试方案,是因为: 1.Selenium IDE ,一个FireFox plugin,能自动记录用户的操作,生成测试脚本。 2. 生成的测试脚本可以用Selenium Core手工执行,也能基于Selenium RC放入Java,C#,Ruby的单元测试用例中自动运行。 3. 测试用例调用实际的浏览器(如IE、FireFox)来执行测试。和有些开源方案