2013-07-23 9 views
5

しばらくすると、jUnitテストとtestNGテストを1回のビルドで実行するようにmaven surefireを設定することは可能です。私はそれをやっている理由を拡張しません(ok、ヒント:testNGは標準フレームワークですが、jnarioのようなフレームワークではjUnitが必要です)。JUnitとTestNGテストを正常に実行するにはどうすればいいですか?

それを行うための一般的な方法は次のように確実なプラグインを設定することです:これは非常にうまく機能

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>${surefire.version}</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-junit47</artifactId> 
      <version>${surefire.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-testng</artifactId> 
      <version>${surefire.version}</version> 
     </dependency> 
    </dependencies> 
</plugin> 

(taken from here)

、JUnitテストとTestNGのテストが実行されます。

しかし、testNGはjUnitテストを実行しようとしています(そしてその逆もあります)。もちろん、注釈は表示されないので、成功しません。とにかく、いくつかの報告ツールは、2番目の依存関係エントリをコメントしない限り、jUnitテストでテストが失敗したことを示していません。

両方のフレームワークからのテストがテストランナーによってのみ実行されるように、確実に確実に設定する方法はありますか?

+0

Maven-Users-Listでクロス投稿:http://maven.40175.n5.nabble。com/maven-surefire-selection-providers-td5764817.html –

答えて

1

私はそれをやっていませんが、Maven-surefire-pluginの2つを設定し、これらの実行の1つをJUnitテストのみを実行し、もう1つはtestNGテストを実行するように設定することができます。 JUnitテストとtestNGテストを区別するためには、異なるディレクトリにテストを置くか、識別可能なネーム・スキームを使用し、それぞれの実行を適切なinclusion and exclusion patternsで構成する必要があります。

これはうまくいくはずです:)

+0

''要素を実行に引き出すことができません。もしできれば、実際には*解決策になるでしょう.JUnitに限定された1つの実行と、TestNGへのもう1つの実行:( –

+0

私は間違っています。元の質問と同じように両方の依存関係を持つことを意味します。別のインクルード/除外を設定すると、JUnitテストのみが検索され、もう1つはtestNGテストが見つかるでしょう。このようにして、不要なテストは確実に除外され、テストフレームワークに渡されません。 –

+1

ああ、私もそれを試しました(さらに悪化しました)。TestNGはすべての実行で起動され、実行するテストが1つもないとビルドに失敗します(はい、プロパティがあります...)。 mavenユーザーのメーリングリストから、[問題を報告する](https://jira.codehaus.org/browse/SUREFIRE-1019)に強くお勧めします。+1の回答とヘルプ! –

4

あなたと同じ問題がありました。 TestNGレポートではゼロになりますが、テストが実行されたように見えます。 は最後にまず、プラグインからdependenciesセクションを削除maven-surefire-plugin

  1. 2回の別々の実行でこの仕事を得ます。そうでない場合は
    • あなたが<testNGArtifactName>を使用して(と私たちはそれをする必要があります)場合のテストはとにかくTestNGのことで実行され、TestNGのテストとJUnitテストのいくつかの分離を有するjava.lang.NullPointerException
  2. に失敗します。
  3. でテスト
<plugin> 
    <!-- configured to work with JUnit and TestNg in same project separatelly --> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId>    
    <configuration> 
     <!-- whatever you need... --> 
     <!-- skip the default execution, we have separate for Ng and for JUnit --> 
     <skip>true</skip> 
    </configuration> 
    <executions> 
     <execution> 
      <id>TestNg-execution</id> 
      <phase>test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      <configuration> 
       <!-- overwrite skip from default config --> 
       <skip>false</skip> 
       <includes> 
        <include>%regex[.*TestNg.*]</include> 
       </includes> 
       <!-- used to skip JUnit profider --> 
       <junitArtifactName>dev:null</junitArtifactName> 
       <!-- to continue on next execution in case of failures here --> 
       <testFailureIgnore>true</testFailureIgnore> 
      </configuration> 
     </execution> 
     <execution> 
      <id>JUnit-execution</id> 
      <phase>test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      <configuration> 

       <skip>false</skip> 
       <!-- used to skip TestNg profider --> 
       <testNGArtifactName>dev:null</testNGArtifactName> 
       <excludes> 
        <exclude>%regex[.*TestNg.*]</exclude>        
       </excludes> 
      </configuration>      
     </execution> 
    </executions> 
</plugin> 

<junit-version>4.11</junit-version> 
<maven-surefire-plugin-version>2.16</maven-surefire-plugin-version> 
<org.testng-version>6.8.7</org.testng-version> 

この構成はのマージである我々の場合のNGテストクラス名では、デフォルトの実行

  • は、以下のような2 <executions>を定義スキップTestNg
  • で終わりますからのアイデア:
    Running TestNG-, JUnit3- and JUnit4-tests with Maven Surefire in one run
    your SUREFIRE bug report,
    surefire plugin configuration

    希望します。

  • +0

    Excelent solution! – bedrin

    関連する問題