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

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

JUnit フレームワークでは、テスト ケースとテスト データを迅速かつ簡単に生成することもできます。の org.Junit パッケージは多くのインターフェースとクラスで構成されています JUnit Test、Assert、After、Beforeなどのテスト。

テストフィクスチャとは

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

このコードは、単純なファイルに対して 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 を含むメソッドで使用されます Java 各テスト ケースの前に実行するコード。 つまり、各テストの実行前に実行されます。

解体(評決に関係なく)

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

注記:

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

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

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
    }
}

上記の例では、実行チェーンは次のようになります。

セットアップと分解

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

仮定:

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

XNUMX 回限りのセットアップ

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

一度限りの破棄

  • XNUMX 回限りのセットアップと同様に、XNUMX 回限りのクリーンアップ方法も利用できます。 すべてのテスト ケース メソッドの後に実行され、 @後 注釈が実行されました。
  • サーバーを停止したり、通信リンクを閉じたりする場合に便利です。
  • これは、 @放課後 注釈
 @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());					
   }		
}      

上記のコードでは、実行中のテスト ケースの失敗結果と成功結果を取得するために「結果」オブジェクトが処理されます。

名 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

テスト メソッド (上記) を実行するには、テスト ランナーを作成する必要があります。テストランナーでは、テストクラスをパラメータとして追加する必要があります。 JUnitコアの 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. 失敗した場合は結果が赤で表示され、失敗は失敗トレースで観察できるはずです。以下を参照してください JUnit GUI :

JUnit プログラム出力

まとめ

  • JUnit は、テストを含むメソッドを識別するためのいくつかのアノテーションをサポートするフレームワークです。
  • JUnit という注釈を提供します @テスト、 それは、 JUnit それが使用されるパブリック void メソッドがテスト ケースとして実行できること。
  • テスト フィクスチャは、テスト ケースが実行されるコンテキストです。
  • 複数のテストを指定した順序で実行するには、すべてのテストを XNUMX か所に結合します。 この場所はテストスイートと呼ばれます。
  • JUnit テスト ランナーと呼ばれるテスト ケースを実行できるテスト実行ツールを提供します。