java - 如何从父级 Maven 模块运行测试?

标签 java maven maven-failsafe-plugin

我在 mvn 中有以下结构。

| pom.xml (parent)
|
|
+----- module A (common classes)
|      |   pom.xml
|      |
|      \---src
|          +---main
|          |
|          \---test
|              +---junit
|              |
|              \---integration
|
+----- module B (web app)
|      |   pom.xml
|      |
|      \---src
|          +---main
|
+----- module C (web app)
|      |   pom.xml 
|      |
|      \---src
|          +---main

模块 A 是被所有后续模块(B、C、...)继承的模块。该模块具有通用功能和junit/集成测试用例。这不是一个网络应用程序。

模块 B 是一个网络应用程序。它依赖于模块 B。

模块 C 是一个网络应用程序。它依赖于模块 B。

我们的 Jersey REST/API 代码位于模块 A 中。这样,无论我们部署哪个模块,我们都将始终可以访问 REST/API。

到目前为止,我已经成功在模块 C 中配置 Maven FailSafe 插件,以便在运行顶部(父)pom.xml(即:mvn verify)时启动 tomcat 实例。

但是,模块 C 无法看到模块 A 的集成测试。我已尝试配置 maven-jar-plugin ( http://maven.apache.org/guides/mini/guide-attached-tests.html )。

在模块 A 的 pom.xml 中,我有:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <executions>
      <execution>
        <goals>
          <goal>test-jar</goal>
        </goals>
        <configuration>
          <includes>
            <include>**/*IT.java</include>
          </includes>
        </configuration>
      </execution>
    </executions>
  </plugin>

在模块 C 中我有:

    <dependency>
        <groupId>groupId</groupId>
        <artifactId>SCCommon</artifactId>
        <type>test-jar</type>
        <classifier>tests</classifier>
        <version>9.1.0-SNAPSHOT</version>
        <scope>test</scope>
   </dependency>

任何人都可以帮我弄清楚当 mvn 运行模块 C 故障安全插件时如何在模块 A 中运行这些集成测试。

注意:集成测试被命名为 *IT.java,因此它会被故障安全插件拾取。

还有其他方法可以做到这一点吗?或者我什至使用了正确的插件?

提前非常感谢。

最佳答案

如果模块 C 包含对带有 tests 分类器的 A 的依赖项,您可以在 <dependenciesToScan> 中引用该依赖项。 maven-failsafe-plugin(自 2.15 起)配置的属性。

http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#dependenciesToScan

<dependency>
    <groupId>com.group</groupId>
    <artifactId>A</artifactId>
    <version>1.0-SNAPSHOT</version>
    <classifier>tests</classifier>
</dependency>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.15</version>
    <executions>
        <execution>
            <id>it</id>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <dependenciesToScan>
            <dependency>com.group:A</dependency>
        </dependenciesToScan>
    </configuration>
</plugin>

使用您的 maven-jar-plugin 配置,我最终得到了一个空的测试存档。我不得不将模式更改为 <include>**/*IT.class</include> .

关于java - 如何从父级 Maven 模块运行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43461536/

相关文章:

java - Eclipse M2E/变更单和导出

java - Eclipse 执行集成测试,但 Maven 不执行

HDFS 0.22.0 中的 java.io.EOFException

java - VerifyError 在 Java 8 中对 Lambda 表达式非法使用非虚函数调用

java - ImageView 未在RelativeLayout 中显示

java - 如何将 Cucumber JUnit 步骤标记为失败但继续

java - Maven:自定义魔力、目标和阶段,它如何适合?

java - 从 JPA 实体查找用于 DDL 生成的 jpa-ddl-maven-plugin 时出错

maven-failsafe-plugin 失败和构建成功?

java - mvn 集成测试与 mvn 故障安全 :integration-test