2013-05-28 7 views
20

mvn testと言うとき、通常は、mavenがsrc/test/javaフォルダにあるテストを探します。しかし私はいくつかの異なるフォルダ、src/integration-test/javaでテストしています。このフォルダにあるテストをコマンドラインで実行するにはどうすればよいですか?src/test-integration/javaフォルダにあるmavenのUnitTestsを実行する方法

ありがとうございます。

Manoj。

+3

どのような解決策があなたのために働いたのだろうか。 – FrVaBe

答えて

26

まず、あなたは、テストlife cycleを経由して、それらの統合テストを実行 事前統合テスト統合テストライフ・サイクル・フェーズが存在しと統合後のテストが発生することはありません。統合テストの場合とは別に、maven-failsafe-pluginが責任を負います。

状況に応じていくつかのオプションがあります。まず、デフォルトのフォルダのsrc /テスト/ javaのに統合テストを置くことを意味統合テスト

<includes> 
<include>**/IT*.java</include> 
<include>**/*IT.java</include> 
<include>**/*ITCase.java</include> 
</includes> 

ためnaming conventionsに従ってください。マルチモジュールビルドを使用している場合は、統合テストのみが含まれている別のモジュールを使用することをお勧めします。または、別のフォルダを使用することを決めたパスに進むことができます(これはベストではありません)。

あなたは次のようにコンパイルされているそれらの統合テストを取得するためにbuildhelper-maven-pluginを使用して、フォルダを追加する必要があります。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.9.1</version> 
    <executions> 
     <execution> 
     <id>add-test-source</id> 
     <phase>process-resources</phase> 
     <goals> 
      <goal>add-test-source</goal> 
     </goals> 
     <configuration> 
      <sources> 
      <source>src/integration-test/java</source> 
      </sources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

、あなたがこのようなのmaven-フェイルセーフ・プラグインの設定する必要があります:あなたが持っている後

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-failsafe-plugin</artifactId> 
     <version>2.14.1</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

をあなたはあなたのインテグラを走らせることができますションテストを経由:

mvn verify 
+0

統合テスト後に何も起こっていなければ、 'mvn integration-test'を使うことも同様に有効でしょうか? – vikingsteve

+0

はい、うまくいくでしょうが、私はいつも 'mvn verify'を使うことを提案します。これは、post-integrationの後であり、post-integrationフェーズを確実に実行します。 – khmarbaise

13

@khmarbaiseは、右の彼の勧告(そのためにそう+1)であるが、私はテストソースはどこか他の場所に配置されている理由について推測することなく、あなたの質問にお答えしたいと思います。

テストが標準のsrc/test/javaディレクトリ以外のディレクトリにある場合は、最も簡単な解決策は、で定義されているtestSourceDirectory構成パラメータのデフォルト値を変更することです。

src/foobar/java使用

<build> 
    <testSourceDirectory>src/foobar/java</testSourceDirectory> 
</build> 

のために、あなたは、単にテストを実行するためにmvn testを実行することができます。


もっと複雑なソリューション...

あなたは、このようなコマンドラインでtestSourceDirectoryパラメータをspecifiyできるのpom.xml構成を変更したくない場合は、次の

mvn -DtestSourceDirectory=src/foobar/java clean test 

しかし、あなたのソースがコンパイルされていることを確認してください。さもなければ、それらは見つけられて実行されません。上記の例では、テスト・ソースは、デフォルトでコンパイルされる位置に配置されていないので、我々はそれにもかかわらず、ポンポンを変更し、buildhelperプラグイン使用して、テストソースのリストにディレクトリを追加する必要があります。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <id>add-test-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-test-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>src/foobar/java</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

をpomのデフォルト値の設定を変更せずに、コマンドラインで新しいディレクトリを渡したくない場合は、pavenのmaven-buildhelper-pluginとmaven-surefire-pluginのパスを設定する必要がありますこのような.xmlファイル:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.8</version> 
      <executions> 
       <execution> 
        <id>add-test-source</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-test-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>src/foobar/java</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.14.1</version> 
      <configuration> 
       <testSourceDirectory>src/foobar/java</testSourceDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

今再びmvn testの簡単な使い方がexecします標準でない場所でテストを行ってください。

+0

すでに議論したように、統合テストと単体テストについての*ではない*ので、単体テストを担当するmaven-surefire-pluginの設定を変更するのは間違った方法です。統合テストを目的としたmaven-failsafe-pluginの方が使いやすくなりました。あなたの提案された変更に基づくものとは別に、Mavenの規則に反するテストのライフサイクル中に統合テストが実行されます。 – khmarbaise

+0

@khmarbaise私がすでに指摘したように、私はあなたの推薦に従って+1を与えました。しかし、この質問のタイトルは_Uow to ** UnitTests ** ...です。統合テストの唯一のヒントは、テストコードに使用されるディレクトリの名前です(@KS MANOJ彼は統合テストを実行しており、フェイルセーフプラグインについて話していることを指摘しています)。だから私は単純な質問に合理的な回答を与えたと思います。デフォルトのフォルダとは違うフォルダでテストを実行する方法です(_しかし私はいくつかの異なるフォルダでテストをしています...)。 – FrVaBe

+0

@khmarbaiseところで、私の解決策は、確かなファイアウォールやフェールセーフプラグインの実行に影響しません(例えば、別のライフサイクルで実行するなど)。どのような名前付け規則であれ、@ K S MANOJはどんなプラグイン構成を選んでも(私たちは知らない)、テストソースのデフォルトフォルダを変更してもこれらの設定は変更されず、@ K S MANOJによって構成された通りにビルドが実行されます。 – FrVaBe

関連する問題