
TestNGは2004年にGoogleエンジニアだったCédric Beustが公開したJava向けテストフレームワークである。「Next Generation」を意味する名前のとおりJUnitの限界を解消することを目的に設計され、テストグループ、依存関係、データ駆動、並列実行、設定駆動の柔軟性などを提供する。Selenium WebDriverと組み合わせたE2EテストやJava EE系の大規模統合テストで広く採用されてきた。本稿ではTestNGの背景、主要機能、JUnitとの比較、ビルドツール連携を整理する。
この記事の目次
- TestNG誕生の背景
- グループ・依存・データプロバイダ
- 並列実行とMaven/Gradle連携
- JUnit 5との比較と選び方
- まとめ
TestNG誕生の背景

2004年当時のJUnit 3はTestCase継承前提で、テストの分類や条件付き実行、データ駆動などを実現するにはコミットの工夫が必要だった。Cédric BeustはGoogle社内の業務でJavaの統合テスト基盤を整備するなか、より宣言的にテストを構成するためのフレームワークとしてTestNGを設計し、Java 1.5から導入されたアノテーションをいち早く全面採用した。
TestNGの設計柱は「グルーピング」「依存関係」「データ駆動」「並列実行」の四点である。@Test(groups = "smoke")のようにテストへタグを付けて、smoke/regression/nightlyなど目的別に実行範囲を切り替える発想は、後にJUnit 5のTagや、各言語のテストランナーへ影響を与えた。後にJUnit 4も同等のアノテーションスタイルを取り入れたが、TestNGの先進性は今でも評価されている。
グループ・依存・データプロバイダ

TestNGのテストには@Testに複数のグループを付与でき、testng.xmlからグループ単位の包含・除外を指定する。またテスト間の依存もdependsOnMethodsやdependsOnGroupsで宣言でき、ログイン→注文→決済のように順序が決まったシナリオを構成しやすい。失敗したテストの依存先は自動的にスキップされ、原因切り分けが容易になる。
データ駆動テストには@DataProviderを用いる。戻り値がObject[][]またはイテレータの形でテストへ複数行を流し込み、CSVやDBから読んだデータをそのままテストパラメータに変換できる。@Factoryを併用すればテストクラス自体をデータごとに生成でき、Selenium連携で多数のブラウザ・解像度を網羅する用途と相性が良い。
並列実行とMaven/Gradle連携

TestNGの並列実行はtestng.xmlのparallel属性で、methods/tests/classes/instancesから粒度を選ぶ。thread-countでスレッド数を指定し、SeleniumGridを背景にしたE2Eで複数ブラウザを同時に走らせる構成が定番である。MavenではSurefireプラグインがTestNGを直接サポートし、GradleはTestNGをJUnitと同列のテストエンジンとして扱える。
リスナーAPIが整備されており、ITestListenerやIInvokedMethodListenerを実装してテスト前後のログ収集、失敗時スクリーンショット保存、Allure ReportやExtentReportsとの連携を行うパターンが豊富である。Selenium WebDriver、RestAssured、Spring TestContextとの統合チュートリアルが多数公開されており、Java/QAエンジニアにとっては実務寄りのテスト基盤の代表格となっている。
JUnit 5との比較と選び方

TestNGとJUnit 5は機能的に近接しているが、JUnit 5はSpring BootやMicronautなど主要フレームワークと密結合し、Extensionモデルでの拡張性が高い。一方TestNGはSelenium WebDriver系E2E、レガシーJava EE資産、QAエンジニア中心のテスト自動化基盤で深く根付いている。
新規Webアプリの単体テスト中心であればJUnit 5、E2Eや統合テストでグループ・依存・データ駆動を駆使したいならTestNG、という棲み分けで考えると判断しやすい。両者は同じプロジェクト内で共存可能で、Spring TestはどちらにもAdapterを提供している。資産と要件を踏まえつつ、テスト基盤の選定を行うのが現実的なアプローチである。
まとめ
TestNGはJUnitの不足を補う目的で生まれた高機能なテストフレームワークであり、グループ、依存、データ駆動、並列実行を統合的に提供する。Selenium E2Eや大規模統合テストで定番となっており、JUnit 5と機能差は縮まったものの、QA中心の自動化基盤や既存資産が多い現場では今も第一選択肢として通用するツールである。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント