MavenおよびJUnitカテゴリを使用したユニットおよび統合テスト

この例は、MavenおよびJUnitカテゴリーを使用してユニットテストと統合テストを分割する方法を示しています。

これは、既存のテストスイートに特に役立ち、数分で実装できます。

以前の投稿では、Mavenプロファイルを使用してユニットテストと統合テストを分割する方法を示しました。

//johndobie.blogspot.co.uk/2011/06/seperating-maven-unit-integration-tests.html

これは非常によく読まれている投稿であり、個別のディレクトリを使用する方法が気に入っています。ただし、この例は、レガシーテストスイートに簡単に適用できるはるかに単純な手法を示しています。

オリジナルの利点のほとんどを提供し、Mavenの世界でより快適に座ります。

例のコードはここにあります。

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/categor... mvn clean install 

JUnit 4.8以降、テスト用に独自のカテゴリーを定義できます。これにより、テストにラベルを付けてグループ化できます。

この例は、@ Catgegoryアノテーションを使用してユニットと統合テストを分離することがいかに簡単かを示しています。

//kentbeck.github.com/junit/javadoc/latest/org/junit/experimental/categories/Categories.html

カテゴリを使用してテストをグループ化する最初のステップは、マーカーインターフェイスを作成することです。

このインターフェースは、統合テストとして実行するすべてのテストをマークするために使用されます。

public interface IntegrationTest {} 

テストクラスの先頭にカテゴリアノテーションを追加します。新しいインターフェースの名前を取ります。

import org.junit.experimental.categories.Category; @Category(IntegrationTest.class) public class ExampleIntegrationTest{ @Test public void longRunningServiceTest() throws Exception { } } 

カテゴリは、クラスまたはメソッドをマークするために使用できます。本当に私の意見では、クラスにマークを付けるだけです。

単一のクラスにユニットテストと統合テストの両方がある場合は、それを分割します。

このソリューションの優れている点は、単体テストの側面では実際には何も変わらないことです。

統合テストを無視するように、Mavenのsurefireプラグインに構成を追加するだけです。

 org.apache.maven.plugins maven-surefire-plugin 2.11   org.apache.maven.surefire surefire-junit47 2.12     **/*.class  com.test.annotation.type.IntegrationTest   

2つの非常に重要な部分があります。1つは、すべての統合テストを除外するようにsurefireを構成することです。

com.test.annotation.type.IntegrationTest 

Surefireは、統合テストとしてマークされたものを除いて、すべてのテストを実行します。

他の重要な部分は、surefireプラグインが正しいJUnitプロバイダーを使用していることを確認することです。カテゴリを正しく検出するには、JUnit47プロバイダーが必要です。

  org.apache.maven.surefire surefire-junit47 2.12   

これが正しく機能することを確認するために、単体テストを実行できます

mvn clean test 

以下の出力から、単体テストは実行されていますが、統合テストは実行されていないことがわかります。

------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.test.EmptyUnitTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ 

この場合も、この構成は非常に簡単です。

標準のフェイルセーフプラグインを使用し、統合テストのみを実行するように構成します。

 maven-failsafe-plugin 2.12   org.apache.maven.surefire surefire-junit47 2.12    com.test.annotation.type.IntegrationTest     integration-test    **/*.class      

構成では、標準の実行目標を使用して、ビルドの統合テストフェーズでフェイルセーフプラグインを実行します。

次の構成では、統合テストのみが実行されます。

com.test.annotation.type.IntegrationTest 

また、JUnitプロバイダーを正しく構成する必要があります。

  org.apache.maven.surefire surefire-junit47 2.12   

それでおしまい!

これで、ビルド全体を実行できます。

mvn clean install 

今回は、単体テストの実行と同様に、統合テストフェーズで統合テストが実行されます。

------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.test.AnotherEmptyIntegrationTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec Running com.test.EmptyIntegrationTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 

このメソッドにコードカバレッジを追加するのがいかに簡単かを確認するには、このリンクをチェックしてください。

//johndobie.blogspot.co.uk/2012/05/easy-unit-and-integration-code-coverage.html

を使用するより完全な例については、Tomcatとデータベースを起動します。

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/code-co... mvn clean install -Ptomcat-embedded 

この例に基づいています

//johndobie.blogspot.com/2011/10/maven-integration-testing-and-spring.html

このストーリー「MavenおよびJUnitカテゴリを使用したユニットおよび統合テスト」は、もともとJavaWorldによって公開されました。