【问题标题】:How to run tests from parent mvn module?如何从父 Maven 模块运行测试?
【发布时间】:2017-04-18 00:10:00
【问题描述】:

我在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 运行 Module C 故障安全插件时,谁能帮我弄清楚如何在 Modula A 中运行这些集成测试。

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

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

非常感谢。

【问题讨论】:

  • 如果您需要创建&lt;include&gt;**/*IT.java&lt;/include&gt;,则表明您应该有一个单独的集成测试模块,您应该在其中放置集成测试。

标签: java maven maven-failsafe-plugin


【解决方案1】:

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

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 配置,我最终得到了一个空的测试存档。我不得不将模式更改为&lt;include&gt;**/*IT.class&lt;/include&gt;

【讨论】:

  • 非常感谢,我已将测试分类器和 dependenciesToScan 标签添加到配置中。现在全部在 Module C pom 中。我还将扩展名从 .java 更改为 .class 以使 maven-jar-plugin 工作。检查并且存档不为空。现在,当我运行 mvn verify 我得到 -> 无法在项目模块 C 上执行目标:无法解析项目 com.xxx.connect:ModuleC:war:9.1.0-SNAPSHOT: 找不到工件 com.xxx.pathways 的依赖项.common:ModuleA:jar:tests:9.1.0-SNAPSHOT。但是,当我转到模块 A 时,在目标下,我可以看到 ModuleA-9.1.0-SNAPSHOT-tests.jar 文件
  • @allegjdm93 在运行mvn verify 之前,您是否执行了mvn install 以将模块A 安装到本地mvn 存储库中,以便其他项目可以使用该依赖项?或者,POM 文件中的某个地方可能存在拼写错误。
猜你喜欢
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多