JUnit テストケース @Before @BeforeClass アノテーション

⚡ スマートサマリー

JUnit は、最も広く使用されている単体テストフレームワークです。 Javaまた、そのテストフィクスチャの注釈によって、テストクラス内の各テストメソッドの実行前後に何が起こるかを正確に制御できます。

  • 🔘 備品: テストフィクスチャとは、テストケースが実行されるオブジェクトとリソースの固定されたコンテキストのことです。
  • ☑️ セットアップ: @Beforeは各テストメソッドの前に実行されますが、@BeforeClassはクラス全体の前に一度だけ実行されます。
  • 取り壊す: @After は、テストが例外をスローしたり、アサーションが失敗したりする場合でも、すべてのテストの後に実行されます。
  • 🧪 注文: スーパークラスの @Before が最初に実行され、次にサブクラスの @Before、@Test、そして各 @After が実行されます。
  • 🛠️ ランナー: JUnitCore.runClasses() はテストクラスを実行し、失敗したすべての結果を保持する Result オブジェクトを返します。
  • 📊 JUnit 5: @Before、@After、@BeforeClass、@AfterClass は、@BeforeEach、@AfterEach、@BeforeAll、@AfterAll になります。

JUnit @Beforeおよび@BeforeClassアノテーションを使用したテストフィクスチャ

JUnit 最も人気のあるユニットです テスト フレームワーク Java. 明示的に推奨されているのは 単体テスト. JUnit ウェブアプリケーションのテストにサーバーを必要としないため、テストプロセスが迅速になります。

その JUnit フレームワークでは、テスト ケースとテスト データを迅速かつ簡単に生成することもできます。の org.junit パッケージは、 JUnit テスト、アサート、アフター、ビフォーなどのテスト。 JUnit 家族もまた、こうした同じ構成要素の上に成り立っている。

テストフィクスチャとは何ですか?

テストフィクスチャとは何かを理解する前に、以下のコードを見てみましょう。

このコードは、単純なファイルに対して XNUMX つのテスト ケースを実行するように設計されています。

public class OutputFileTest {
    private File output; 
    output = new File(...);
    output.delete(); 
public void testFile1(){
        //Code to verify Test Case 1
}
    output.delete();
    output = new File(...);
public void testFile2(){
        //Code to verify Test Case 2
}
 output.delete(); 
}

ここにはいくつかの問題があります

  • コードは判読できません。
  • コードの保守は容易ではありません。
  • テスト スイートが複雑な場合、コードに論理的な問題が含まれる可能性があります。

同じコードを使用して比較します JUnit.

public class OutputFileTest		
{
    private File output; 
    @Before public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

このコードははるかに読みやすく、保守しやすい。上記のコード構造は テスト治具。

テスト フィクスチャは、 JUnit テストケース 走る。 通常、テスト フィクスチャには次のものが含まれます。

  • あらゆるテスト ケースで使用できるオブジェクトまたはリソース。
  • これらの物品や資源を利用可能にするために必要な活動。
  • これらの活動は、
    1. 割り当て ( )
    2. 割り当て解除 (取り壊す).

セットアップと分解

照明器具が重要な理由は JUnit これらのフックは、すべてのテストで実行されます。

  • 通常、各テスト ケースの前に実行する必要がある繰り返しのタスクがいくつかあります。 例: データベース接続を作成します。
  • 同様に、各テストケースの最後には、いくつかのタスクが繰り返される場合があります。 例: テストの実行が終了したらクリーンアップします。
  • JUnit セットアップとティアダウンに役立つ注釈を提供します。これにより、リソースが確実に解放され、テストシステムが次のテストケースの準備が整った状態になります。

ボーマン JUnit 注釈については以下で説明します。

@前に の注釈 JUnit を含むメソッドで使用されます Java 各テストケースの前に実行されるコード、つまり、各テスト実行の前に実行されるコード。

解体(評決に関係なく)

@後 アノテーションは、以下の内容を含むメソッドに使用されます。 Java 各テストケースの後に実行されるコード。これらのメソッドは、テストケースで例外が発生した場合やアサーションが失敗した場合でも実行されます。

注意:

  • 上記の注釈はいくつでも付けることができます。
  • 注釈が付けられたすべてのメソッド @前に in JUnit は各テスト ケースの前に実行されますが、任意の順序で実行できます。
  • スーパークラスから @Before メソッドと @After メソッドを継承できます。実行は次のようになります。これは標準的な実行プロセスです。 JUnit.
  1. 実行する JUnit スーパークラスの @Before メソッド
  2. このクラスの @Before メソッドを実行します
  3. このクラスで @Test メソッドを実行します
  4. このクラスの @After メソッドを実行します
  5. スーパークラスで @After メソッドを実行する

JUnit 5年の注記: これらの注釈は JUnit 4(org.junit). JUnit 5 は名前を変更しました org.junit.jupiter.api JUnit 以下の4つのコードは、旧型エンジンでも動作します。

JUnit 4つの注釈 JUnit 5(木星)相当 Active Runs
@前に @BeforeEach すべてのテスト方法の前に
@後 @AfterEach 各テスト方法の後
@BeforeClass @BeforeAll クラス全員の前で一度
@放課後 @結局 全員の後に一度
@無視する @無効 注釈付きテストをスキップします

例:テストフィクスチャとしてファイルを持つクラスを作成する

public class OutputFileTest		
{
    private File output; 
    @Before	public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

上記の例では、実行の流れは次のようになります。図 tracテストメソッドごとに、作成-テスト-削除のサイクルが1回発生します。

JUnit 2つのテストメソッドを囲む@Beforeと@Afterの実行チェーン

  1. createOutputFile()
  2. testFile1()
  3. deleteOutputFile()
  4. createOutputFile()
  5. testFile2()
  6. deleteOutputFile()

仮定:

testFile1() は testFile2() より先に実行されますが、これは保証されていません。

XNUMX 回限りのセットアップ

  • メソッドは、テストが実行される前、およびテストが実行される前に、テスト クラス全体に対して XNUMX 回だけ実行できます。 @前に メソッド。
  • 「一度限りの設定」は、サーバーの起動、通信の開始、その他同様の作業に役立ちます。テストごとにリソースを閉じたり開いたりするのは時間がかかります。
  • これはアノテーションを使用して行うことができます @BeforeClass in JUnit.
@BeforeClass public static void Method_Name() {	
    // class setup code here	
 }	

その方法は パブリック静的空隙、理由 JUnit テストインスタンスが存在する前に呼び出されます。

一度限りの破棄

  • 一度限りのセットアップと同様に、一度限りのクリーンアップ方法も利用できます。これは、すべてのテストケースメソッドの後に実行され、 @後 注釈が実行されました。
  • 停止に役立ちますping サーバーと通信リンクの切断。
  • これは、 @放課後 注釈。
 @AfterClass public static void Method_Name()	
 {	
    // class cleanup code here	
 }	

JUnit テストスイート

試験日程が確定すると、関連する試験クラスは通常グループ化され、同時に開始されます。

複数のテストを特定の順序で実行したい場合は、すべてのテストを1か所にまとめることで実現できます。この場所をテストスイートと呼びます。テストスイートの実行方法と使用方法の詳細については、 JUnit この チュートリアル.

JUnit テストランナー

JUnit テスト ケースを実行するためのツールを提供します。

  • JUnitペース: クラスはこれらのテストを実行するために使用されます。
  • と呼ばれるメソッド 実行クラス により提供さ org.junit.runner です。JUnitペース: XNUMX つまたは複数のテスト クラスを実行するために使用されます。
  • このメソッドの戻り値の型は、 結果 オブジェクト(org.junit.runner.結果これは、テストに関する情報にアクセスするために使用されます。より詳しく知りたい場合は、以下のコード例を参照してください。
public class Test {				
			public static void main(String[] args) {									
       		Result result = JUnitCore.runClasses(CreateAndSetName.class);					
			for (Failure failure : result.getFailures()) {							
         		System.out.println(failure.toString());					
      }		
      System.out.println(result.wasSuccessful());					
   }		
}      

上記のコードでは、「result」オブジェクトが処理され、実行中のテストケースの失敗と成功の結果が取得されます。ヘルパーとしては、 アサートイコール それらの失敗を取り上げながら @無視する テストを欠席する。

JUnit 5年の注記: JUnitペース: は JUnit 4人目のランナー。 JUnit 5 はそれを JUnit Platform ランチャー API は通常 IDE によって起動され、 Gradle またはMaven Surefire。

最初 JUnit プログラム

SDLCに関する十分な知識、 Java プログラミング、そしてその基礎 ソフトウェアテスト プロセスは理解に役立ちます JUnit プログラム、そしてその方法を知ることも 単体テスト 統合テストとは異なる。

実際の例を使って単体テストを理解しましょう。テストメソッドに注釈を付けたテストクラスを作成する必要があります。 @テスト 以下に示すように:

MyFirstClassTest.java

package guru99.JUnit;		

import static org.junit.Assert.*;				

import org.junit.Test;		

public class MyFirstClassTest {				

    @Test		
    public void myFirstMethod(){					
        String str= "JUnit is working fine";					
        assertEquals("JUnit is working fine",str);					
    }
}		

テストランナー.java

上記のテストメソッドを実行するには、テストランナーを作成する必要があります。テストランナーでは、テストクラスをパラメーターとして追加する必要があります。 JUnitCoreのrunClasses()メソッド。テストが合格か不合格かに基づいて、テスト結果を返します。

詳細については、以下のコードを参照してください。

package guru99.JUnit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
            Result result = JUnitCore.runClasses(MyFirstClassTest.class);					
			for (Failure failure : result.getFailures()) {							
              System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

出力

Once テストランナー.java テストメソッドを実行すると、失敗または成功として出力されます。出力の説明は以下のとおりです。

  1. この例では、実行後、 MyFirstClassTest.javaテストに合格し、結果は緑色で表示されます。
  2. 失敗した場合は結果が赤色で表示され、その失敗は失敗として観察できます。 trace. 参照 JUnit 以下のGUIをご覧ください。

Eclipse JUnit MyFirstClassTestの合格バー(緑色)を表示したビュー

よくあるご質問

JUnit テストメソッドごとにテストクラスの新しいインスタンスを作成するため、クラスレベルのコードを実行する必要があるときにインスタンスは存在しません。メソッドを静的に宣言すると JUnit 直接呼び出してください。

いいえ。メソッドの順序は意図的に指定されていません。 JUnit 4 件のオファー @FixMethodOrder と JUnit 5 は @TestMethodOrder を提供しますが、順序によっては結合テストが通知されます。

テストメソッドは呼び出されず、失敗ではなくエラーとして報告されます。@After メソッドは引き続き実行されるため、クリーンアップ処理は部分的に構築されたフィクスチャを許容する必要があります。

新しいプロジェクトには以下を追加する必要があります JUnit 5 集約アーティファクト org.junit.jupiter:junit-jupiter。レガシーを保持しているチーム JUnit 4 つのスイートに junit-vintage-engine が追加され、両方とも単一のプラットフォーム上で動作するようになりました。

フィクスチャとは、実際のファイルや接続など、テストを取り巻く準備されたコンテキスト全体のことです。モックとは、スクリプト化された動作を持つ、フィクスチャによって作成されることが多い、テストの代替となる協力者のことです。

はい、@BeforeClass を通じて JUnit 4 または @BeforeAll で JUnit 5. 共有フィクスチャは高速ですが、状態がリークするため、高価な読み取り専用リソース用に確保してください。

AIアシスタントはクラスを読み込み、必要なコラボレーターを推測し、対応する@Afterクリーンアップを含む@Beforeセットアップを作成します。生成されたアサーションは必ずご自身で確認してください。

GitHubコパイロット メソッドシグネチャからテストクラスを生成し、ライフサイクル注釈も含めます。多くの場合、デフォルトは JUnit 4つの輸入品がありますので、パッケージがお使いのエンジンに適合するかご確認ください。