TestNGは、 Cédric Beust氏によって作成され、 JUnitとNUnitに触発されたJavaプログラミング言語用のテストフレームワークです。TestNGの設計目標は、ユニットテスト、機能テスト、エンドツーエンドテスト、統合テストなど、より幅広いテストカテゴリを、より強力で使いやすい機能で網羅することです。
TestNGの主な機能は以下のとおりです。
@DataProvider/またはXML設定を含む)。@Factory)TestSuite、テストスイート、グループ、および実行するテストはXMLファイルで定義および構成されます。TestNGにおけるデータプロバイダとは、テストクラス内のメソッドであり、依存するテストメソッドに様々な実数値の配列を提供するものです。
例:
//このメソッドは、データプロバイダの名前が「provider1」であると宣言しているすべてのテストメソッドにデータを提供します。@DataProvider ( name = "provider1" ) public Object [][] createData1 () { return new Object [][] { { "Cedric" , new Integer ( 36 ) }, { "Anne" , new Integer ( 37 ) } }; }// このテストメソッドは、データが「provider1」という名前のデータプロバイダから提供されるべきであることを宣言します。@Test ( dataProvider = "provider1" ) public void verifyData1 ( String n1 , Integer n2 ) { System . out . println ( n1 + " " + n2 ); }// パラメータ配列のイテレータを返すデータプロバイダ。@DataProvider ( name = "provider2" ) public Iterator < Object []> createData () { return new MyIterator (...); }// 型が java.lang.reflect.Method の引数を持つデータプロバイダ。// これは、複数のテストメソッドが同じプロバイダを使用し、 //どのテストメソッドにサービスを提供しているかに応じて異なる値を返す必要がある場合に特に便利です。 @DataProvider ( name = "provider3" ) public Object [][] createData ( Method m ) { System . out . println ( m . getName ()); return new Object [][] { new Object [] { "Cedric" } }; }データプロバイダの戻り値の型は、次の2つの型のいずれかになります。
Object[][])。最初の次元のサイズはテストメソッドが呼び出される回数であり、2番目の次元のサイズにはテストメソッドのパラメータ型と互換性のあるオブジェクトの配列が含まれます。Iterator<Object[]>唯一の違いはObject[][]、イテレータを使用するとテストデータを遅延的に作成できる点です。TestNG はイテレータを呼び出し、次にこのイテレータから返されるパラメータを 1 つずつ渡してテスト メソッドを呼び出します。これは、メソッドに渡すパラメータ セットが多数あり、それらをすべて事前に作成したくない場合に特に便利です。TestNGは、主要な3つのJava IDE( Eclipse、IntelliJ IDEA、NetBeans)のそれぞれで、標準機能またはプラグインを介してサポートされています。また、 Apache Ant用のカスタムタスクが付属しており、 Mavenビルドシステムでもサポートされています。Hudson継続的インテグレーションサーバーはTestNGを内蔵しており、テスト結果を時系列で追跡およびグラフ化できます。CoberturaなどのほとんどのJavaコード カバレッジツールは、TestNGとシームレスに連携します。
注: Eclipse の TestNG サポートは、Eclipse のバージョン 2018-09 (4.9) までのみ Eclipse Marketplace に組み込まれています。それ以降のバージョンの Eclipse では、TestNG サイトの手順に従って TestNG を手動でインストールする必要があります。[ 3 ]
TestNG は HTML および XML 形式でテスト レポートを生成します。XML 出力は Ant の JUnitReport タスク[ 4 ]によって変換され、JUnit を使用した場合に得られるレポートと同様のレポートを生成できます。バージョン 4.6 以降、TestNG は Reporter API [ 5 ]も提供しており、ReportNG [ 6 ] 、 PDFngreport [ 7 ]、TestNG-XSLT [ 8 ]などのサードパーティのレポート ジェネレーターを使用できます。
TestNGは、 JUnitテスト自動化フレームワークと長年にわたりライバル関係にあります。それぞれに違いと利点があります。Stack Overflowの議論はこの論争を反映しています。[ 9 ] [ 10 ] [ 11 ]
JUnit 5 では、ほとんどの場合、@BeforeAll メソッドと @AfterAll メソッドを static として宣言する必要があります。[ 12 ] TestNG にはこの制約はありません。
TestNGには、テストスイートとグループ用のセットアップ/ティアダウン注釈ペアが4つ追加されています。@BeforeSuite、@AfterSuite、@BeforeTest、@AfterTest、@BeforeGroupと@AfterGroup、@BeforeMethodと@AfterMethodです。また、TestNGはSeleniumを使用したアプリケーションのテスト自動化もサポートしています。
パラメータ化テストは両方のツールで実装されていますが、その方法はかなり異なります。
TestNGには、テストメソッドに可変パラメータ値を提供する2つの方法があります。testng.xmlを設定する方法と、 @DataProviderメソッドを定義する方法です。[ 13 ]
JUnit 5 では、@ParameterizedTestアノテーションにより、パラメータ化されたテストが可能になります。このアノテーションは、@ValueSourceや@EnumSourceなど、パラメータ化された引数のソースを宣言する別のアノテーションと組み合わせて使用します。 @ArgumentsSource を使用すると、ユーザーはより動的な実装が可能になりますArgumentsProvider。[ 14 ] JUnit 4 では、@RunWithと@Parameters がパラメータ化されたテストを容易にするために使用され、@ParametersList[]メソッドは、テスト クラスのコンストラクタに渡されるパラメータ化された値を含むを 返す必要があります。
ユーザーによって、特定のフレームワークの特定の機能を好む場合が多い。JUnitはより広く普及しており、主要なIDEにデフォルトで同梱されていることが多い。TestNGは、豊富な設定オプションと多様なテスト機能で知られている。どちらがより適しているかは、使用状況と要件によって異なる。