TestNG vs JUnit – それらの違い

の主な違い TestNG   JUnit

  • TestNG   Javaベースのフレームワークですが、 JUnit は、JAVA 用のオープンソースの単体テスト フレームワークです。
  • 比較 TestNG Vs JUnit, TestNG 注釈は、 JUnit.
  • TestNG 並列テストを作成できますが、 JUnit 並列テストの実行はサポートされていません。
  • In TestNG, テスト ケースはグループ化できます。 JUnit, テストをグループ化することはできません。
TestNG vs JUnit
TestNG vs JUnit

何ですか TestNG?

TestNG NG は「Next Generation」を意味する自動テスト フレームワークです。 TestNG に触発され JUnit 注釈 (@) を使用します。 TestNG ~の欠点を克服します JUnit を作るように設計されています エンドツーエンドのテスト 簡単です。

使い方 TestNGを使用すると、適切なレポートを生成でき、合格したテスト ケースの数、失敗したテスト ケースの数、およびスキップされたテスト ケースの数を簡単に知ることができます。失敗したテスト ケースを個別に実行できます。

Junitとは何ですか?

JUnit オープンソースのユニットです テスト JAVA用のフレームワーク。 役に立つ Java 開発者が繰り返しテストを書いて実行できるようにします。Erich GammaとKent Beckが最初に開発しました。これはxUnitアーキテクチャのインスタンスです。名前が示すように、これは 単体テスト コードの小さな塊。

テスト駆動型方法論に従う開発者は、コードの前にまずユニットテストを記述して実行する必要があります。

コードの作成が完了したら、すべてのテストを実行すると、テストは成功するはずです。 コードを追加するたびに、すべてのテスト ケースを再実行して、何も壊れていないことを確認する必要があります。

違い JUnit   TestNG

両方 TestNG   JUnit4 は、XNUMX つまたは XNUMX つの機能を除いて同様に見えます。どちらのテクノロジーが単体テストに適しているかをすぐに判断するために、XNUMX つを比較してみましょう。以下の表は、両方でサポートされている機能を示しています。

違い JUnit   TestNG

注釈

両方 JUnit   TestNG 注釈を使用しており、ほとんどすべての注釈は似ています。

TestNG の @Before 、@After と同様の @BeforeMethod 、@AfterMethod を使用します。 JUnit4.

両方 TestNG Junit4 はタイムアウトに @Test(timeout = 1000) を使用します。詳細については以下の表を確認してください。

SNA 詳細説明 TestNG JUnit 4
1 テストのアノテーション @テスト @テスト
2 現在のクラスで最初のテスト メソッドが呼び出される前に実行されます。 @BeforeClass @BeforeClass
3 現在のクラス内のすべてのテスト メソッドの後に実行します @放課後 @放課後
4 各テストメソッドの前に実行されます @BeforeMethod @前に
5 各テストメソッドの後に実行 @アフターメソッド @後
6 テストを無視するためのアノテーション @Test(有効=false) @無視する
7 例外の注釈 @Test(expectedExceptions = ArithmeticException.class) @Test(期待 = ArithmeticException.class)
8 タイムアウト @Test(タイムアウト = 1000) @Test(タイムアウト = 1000)
9 スイート内のすべてのテストの前に実行されます @BeforeSuite N / A
10 スイート内のすべてのテストの後に実行します @アフタースイート N / A
11 テストの実行前に実行されます @BeforeTest N / A
12 テストの実行後に実行されます @アフターテスト N / A
13 これらのグループのいずれかに属する最初のテスト メソッドが呼び出される前に実行されます。 @BeforeGroups N / A
14 ここのグループのいずれかに属する最後のテスト メソッドの後に実行します @アフターグループ N / A

スイートテスト

スイートは、複数のテストをまとめて実行するために使用されます。スイートは両方を使用して作成できます TestNG   JUnit4. ただし、スイートはより強力です TestNG テストの実行に非常に異なる方法を使用するためです。以下に示すコード スニペットを使用してそれを理解してみましょう。

使い方 JUnit4

以下のクラスでは、作業中のスイートの使用について説明します。 JUnit4:

package guru99.junit;		
import org.junit.runner.RunWith;		
import org.junit.runners.Suite;		

@RunWith(Suite.class)				
@Suite.SuiteClasses({				
    SuiteTest1.class,			
    SuiteTest2.class,			

})		

public class JunitTest {		
// This class remains empty,it is used only as a holder for the above annotations		
}

使い方 TestNG

TestNG XML を使用して、すべてのテストを 1 か所にバンドルします。以下の XML では、スイートの使用について説明します。 TestNG:

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
<classes>
<class name="com.guru99.SuiteTest1" />
<class name="com.guru99.SuiteTest2" />
</classes>
</test>
</suite>

テストを無視する

両方を使用すると、テストをスキップできます。以下のコード例を使用して見てみましょう。

使い方 JUnit4

以下のコード スニペットは、作業中の @ignore アノテーションの使用について説明しています。 JUnit4:

@Ignore
public void method1() 
{
	System.out.println("Using @Ignore , this execution is ignored");
}

使い方 TestNG

以下のコード スニペットは、作業中の @Test(enabled=false) アノテーションの使用について説明しています。 TestNG:

@Test(enabled=false)
public void TestWithException()
{  
	System.out.println("Method should be ignored as it's not ready yet");
}

例外テスト

例外テストは、次の両方で使用できます。 TestNG   JUnit4. テストでどの例外がスローされたかを確認するために使用されます。

使い方 JUnit4

以下のコード スニペットは、作業中の例外テストの使用について説明しています。 JUnit4:

@Test(expected = ArithmeticException.class)  
public void divideByZero() 
{  
	Int i = 1/0;
}

使い方 TestNG

以下のコード スニペットは、作業中の例外テストの使用について説明しています。 TestNG:

@Test(expectedExceptions = ArithmeticException.class)  
public void divideByZero()
{  
Int i = 1/0;
}	

タイムアウト

この機能はTestNgと JUnit4.タイムアウトは、指定した時間(ミリ秒)を超えてテストを終了するために使用されます。

使い方 JUnit4

以下のコード スニペットは、作業中のタイムアウト テストの使用について説明しています。 JUnit4:

@Test(timeout = 1000)  
public void method1()
{  
	while (true);  
}

使い方 TestNG

以下のコード スニペットは、作業中のタイムアウト テストの使用について説明しています。 TestNG:

@Test(timeOut = 1000)  
public void method1()
{  
	while (true);  
}

パラメータ化されたテスト

JUnit パラメータ化テストと呼ばれる、より簡単で読みやすいテスト手法を提供します。 TestNG   JUnit はパラメータ化されたテストをサポートしていますが、パラメータ値を定義する方法が異なります。これを一つずつ見ていきましょう。

使い方 JUnit4

「@RunWith」および「@Parameter」アノテーションは、単体テストのパラメータ値を提供するために使用されます。 注釈 @Parameters は List[] を返す必要があります。このパラメータは引数としてクラス コンストラクターに渡されます。

@RunWith(value = Parameterized.class)
public class JunitTest{
    
    privateint number;
    
    public JunitTest6(int number)
 {
    this.number = number;
     }

     @Parameters
    public static Collection<Object[]> data() 
{
       Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };
    returnArrays.asList(data);
    }
     
     @Test
    public void parameterTest()
 {
    System.out.println("Parameterized Number is : " + number);
     }
}

使い方 TestNG

In TestNG, XML ファイルまたは「@DataProvider」は、テスト用のパラメーターを提供するために使用されます。

ここでメソッド内で宣言された @Parameters アノテーションにはテスト用のパラメータが必要です。パラメータとして使用されるデータは次のように提供されます。 TestNGの XML 構成ファイル。こうすることで、単一のファイルを再利用できます。 テストケース 異なるデータセットを使用すると、異なる結果が得られる可能性があります。

public class Test1 {

    @Test
    @Parameters(value="number")
    public void parameterTest(int number)
	{
    	System.out.println("Parameterized Number is : " + number);
    }
     
}

上記のクラスで使用される以下の XML ファイルを参照してください。

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
    
<parameter name="number" value="2"/>    

<classes>
<class name="com.guru99.Test1" />
</classes>
</test>
</suite>

製品概要

私たちは見ました JUnit4本、そして TestNG 詳細に比較します。パラメータ化されたテストと依存性テストを除いて、どちらも類似していることもわかりました。簡単に言えば、柔軟性と要件に基づいて、ユニット テストにどちらか 1 つを選択できます。