196

你如何依赖 Maven 中另一个模块的测试代码?

例如,我有 2 个模块:

  • 根据
  • 主要的

我想要 Main 中的测试用例来扩展 Base 中的基本测试类。这可能吗?

更新:找到了一个可接受的答案,其中涉及创建一个测试 jar。

4

4 回答 4

202

我建议使用类型而不是分类器(另请参阅:分类器)。它更明确地告诉 Maven 你在做什么(我发现 m2eclipse 和 q4e 都更喜欢它)。

<dependency>
  <groupId>com.myco.app</groupId>
  <artifactId>foo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>
于 2008-10-06T16:06:42.400 回答
192

感谢基本模块的建议。但是,我宁愿不为此目的创建一个新模块。

在Surefire Maven 文档博客中找到了可接受的答案。另请参阅“如何创建包含测试类的 jar ”。

这会src/test/java使用jar 插件创建代码的 jar 文件,以便带有测试的模块可以共享代码。

<project>
  <build>
    <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>2.4</version>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
    </plugins>
  </build>
</project>

为了使用上面创建的附加测试 JAR,您只需使用指定的测试分类器指定对主工件的依赖项:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.myco.app</groupId>
      <artifactId>foo</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project> 
于 2008-10-06T15:06:38.747 回答
14

我们通过使用测试代码作为 src/main/java 并将以下依赖项添加到项目中创建一个 maven 项目来解决这个问题:

    <dependency>
        <groupId>foo</groupId>
        <artifactId>test-base</artifactId>
        <version>1</version>
        <scope>test</scope>
    </dependency>
于 2008-10-06T14:44:45.747 回答
-3

是的......只需将 Base 模块作为依赖项包含在 Main 中。如果您只继承测试代码,那么您可以使用范围标记来确保 Maven 在部署时不会将代码包含在您的工件中。像这样的东西应该工作:

<dependency>
    <groupId>BaseGroup</groupId>
    <artifactId>Base</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <scope>test</scope>
</dependency>
于 2008-10-06T14:43:18.043 回答