Mavenでのテストコードの共有


183

Mavenの別のモジュールのテストコードにどのように依存できますか?

例、2つのモジュールがあります。

  • ベース
  • メイン

Mainのテストケースで、Baseの基本テストクラスを拡張したいのですが。これは可能ですか?

更新:テストjarの作成を含む、許容できる回答が見つかりました。


1
以下の受け入れられた回答の組み合わせに相当する回答のようですが、これは実際には以下のより大きな回答に関するメモですが、Mavenサイトにあります。テストクラスを含むjarを作成する方法
David Tonhofer

回答:


189

分類子の代わりにタイプを使用することをお勧めします(参照:分類子)。それはあなたが何をしているかを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>

5
特にtest-jarタイプの場合、com.myco.appには別の依存関係エントリが必要ですか?
Noah Watkins

20
また、test-jarをmaven-jar-plugin構成に追加することを忘れないでください:maven.apache.org/guides/mini/guide-attached-tests.html
user1338062

11
最初にこの答えを読んだとき、私はあなたが最初に以下の回答を読んでください、それは自分自身では意味がないので、それが実際です...混乱していた:stackoverflow.com/questions/174560/...
TanguyPを

179

基本モジュールの提案をありがとう。ただし、この目的のためだけに新しいモジュールを作成したくありません。

Surefire Mavenのドキュメントブログで許容できる回答が見つかりました。「テストクラスを含むjarを作成する方法」も参照してください。

これによりsrc/test/javajarプラグインを使用してコードの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> 

14
依存関係で<classifier> tests </ classifierを使用すると問題が発生する可能性があることに注意してください。代わりに、<type> test-jar </ type>を使用してください。これは、Maven jira.codehaus.org/browse/MNG-2045の1つの問題と、IntelliJの無関係な問題youtrack.jetbrains.net/issue/IDEA-54254
Emil Sit

それは私にとって非常に便利でしたが、問題を発見しました。「install -Dmaven.test.skip = true」を実行すると、依存関係test-jarも必要となり、プロセスが失敗します
Javi Pedrera

@JaviPedrera 'mvn clean install -DskipTests = true'を実行してもtest-jarが作成されても機能します。エラーなし
Karussell 2013

1
@アレンは、jarのパッケージ化中にServiceResultTransformerを使用することを確認しましたか?そうしないと、サービスファイルが互いに上書きしてしまう可能性があります。
jontejj 2015年

1
maven.apache.org/plugins/maven-shade-plugin/examples/…詳細については、こちらをご覧ください。
jontejj

12

これを解決するには、src / main / javaとしてテストコードを使用してmavenプロジェクトを作成し、プロジェクトに次の依存関係を追加します。

    <dependency>
        <groupId>foo</groupId>
        <artifactId>test-base</artifactId>
        <version>1</version>
        <scope>test</scope>
    </dependency>

うん、それはうまくいくだろう、ありがとう!私が好む別の答えについては、以下の私のコメントを参照してください。
2008年

1
私たちはこのアプローチも使用しています。分類器またはタイプ(ほとんどのユーザーにとってMavenでは基本的なものではありません)に行かざるを得ず、本当に必要がない場合はいくつかの労力でJARをビルドする必要があります。それまたは-この場合のように-テストコードのベースとして、事実上非テストコードがあります。
virgo47

-3

そうです... Mainに依存関係としてBaseモジュールを含めるだけです。テストコードのみを継承する場合は、スコープタグを使用して、デプロイ時にMavenがアーティファクトにコードを含めないようにすることができます。このようなものがうまくいくはずです:

<dependency>
    <groupId>BaseGroup</groupId>
    <artifactId>Base</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <scope>test</scope>
</dependency>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.