在Maven中共享测试代码

fli*_*ken 179 testing maven-2

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

例如,我有2个模块:

  • 基础
  • 主要

我想在Main中使用一个测试用例来扩展Base中的基本测试类.这可能吗?

更新:找到一个可接受的答案,其中包括创建一个测试罐.

Ben*_*Ben 184

我建议使用type而不是分类器(另请参阅:classifier).它更明确地告诉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>
Run Code Online (Sandbox Code Playgroud)

  • 还记得将test-jar添加到maven-jar-plugin配置:https://maven.apache.org/guides/mini/guide-attached-tests.html (20认同)
  • 我第一次看到这个答案时感到困惑......这实际上是因为它本身没有意义,你应该首先阅读以下答案:http://stackoverflow.com/questions/174560/sharing-test-code-in -maven#174670 (9认同)
  • 是否应该为com.myco.app专门为test-jar类型设置一个单独的依赖项? (4认同)

fli*_*ken 176

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

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>
Run Code Online (Sandbox Code Playgroud)

为了使用上面创建的附加测试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> 
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在依赖项中使用<classifier> tests </ classifier可能会出现问题.而是使用<type> test-jar </ type>.这是Maven http://jira.codehaus.org/browse/MNG-2045中的一个问题,也是IntelliJ中一个不相关的问题http://youtrack.jetbrains.net/issue/IDEA-54254 (14认同)

sal*_*sal 12

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

    <dependency>
        <groupId>foo</groupId>
        <artifactId>test-base</artifactId>
        <version>1</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)