2016-03-31 1 views
1

testフェーズで並行して実行され、テストごとに1つの.jsonファイルを出力するいくつかのJUnitテストがあります。すべてのテストが完了した後に、カスタムJavaメソッドを呼び出してこれらのファイルの集計と後処理を行います。実行を終了しました。Mavenのテストフェーズの終わりにコードを実行するための推奨される方法は何ですか?

integration-test相は、デフォルトのMavenライフサイクルのpost-integration-test相が続いているが、テストフェーズはpost-test相が続かない、と私は、この目的のために他のいくつかの段階を乱用しないことを好むだろう。

質問testフェーズの終了時に結果を後処理するために推奨される方法は何ですか?

+1

関連性が高いhttp://stackoverflow.com/q/35550818/1743880 – Tunaki

+0

ユニットテスト後にどのようなポストプロセスを実行したいですか?そうであれば、彼らはお互いに独立していません...私に間違って聞こえる... – khmarbaise

+0

@khmarbaise .jsonファイルの内容を1つのファイルにマージし、そのファイルからレポートを生成したいと思います。私はすでにこれを行うためにいくつかのJavaコードを持っています。それはそれを呼び出す最も適切な方法を考え出すことの問題です。リンクされた質問のTunakiの回答に基づいて、Mavenプラグインを作成してテストフェーズにバインドすることをお勧めします。 – rob

答えて

1

another SO postによく記載されているように、良い理由からMavenにはpost-testフェーズがありません(主にユニットテストはユニットテストです)。

しかし、あなたのケースでは、おそらく問題を解決するだけでなく、保守、テスト、共有という点で複雑なレイヤーを追加するMavenプラグインを別途作成する必要はありません。

質問に記載されているように、既にJavaメソッドに必要なコードがあるので、Exec Maven Pluginとそのjavaゴールを使用する方が意味があります。あなたは、したがって、単にあなたのPOMに追加することができ

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.1.1</version> 
    <executions> 
     <execution> 
      <phase>test</phase> <!-- executed as post-test, that is, after Surefire default execution --> 
      <goals> 
       <goal>java</goal> 
      </goals> 
      <configuration> 
       <mainClass>com.sample.JsonFileAggregator</mainClass> <!-- your existing Java code, wrapped in a main --> 
       <arguments> 
        <argument>${project.build.directory}</argument> <!-- directory from where to load json files --> 
       </arguments> 
       <classpathScope>test</classpathScope> <!-- if your Java code is in test scope --> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

test相にその実行を結合、つまり、Mavenは(したがって、デフォルトのMavenシュア実行後)バインディング任意のデフォルト後として、それを実行しますpost-testとして実行されます。

既存のJavaコードは、細工された(まだ存在していない場合)Javaメインを介して呼び出すことができます。引数に渡すこともできます(.jsonファイルをロードする場所、上記スニペットのディレクトリのようにtargetフォルダ例としてその標準的なプロパティ${project.build.directory}を介して)。さらに、スニペットで説明したように、Javaコードはtestスコープ(つまり、src/test/javaの下にあります)に配置されているため、それに合わせてclasspathScopeもコンフィグレーションする必要があります。

関連する問題