あなたの質問は私には二つ折りになっているようです。1つは2つのテストフレームワークを比較したい、もう1つはテストを簡単に実装したい、自然なアサーションが欲しい、などです...
わかりました。まず、JUnitは機能の点でTestNGに追いついてきました。v4とのギャップをいくつか埋めましたが、私の意見では十分ではありません。アノテーションやデータプロバイダーなどは、TestNGではさらに優れています。また、TestNGにはテストの依存関係、グループ化、および順序付けがあるため、テストの実行に関してより柔軟です。
JUnitでは、特定のbefore / afterメソッドを静的にする必要があります。これにより、テストの実行前に実行できる操作が制限されます。TestNGでこの問題が発生することはありません。
TBH、2つのフレームワークの違いのほとんどは、統合/自動化テストに焦点を当てない限り、あまり意味がありません。私の経験からのJUnitは、単体テスト用にゼロから構築され、現在はより高いレベルのテストに向けて推進されています。IMOは、このジョブに適したツールではありません。TestNGは単体テストでうまく機能し、その強力なデータ提供と優れたテスト実行能力により、統合/自動化テストレベルでさらにうまく機能します。
ここで私が別の問題であると私が信じているのは、適切に構造化され、読みやすく、保守可能なテストを作成する方法です。そのほとんどはご存じでしょうが、Factory Pattern、Command Pattern、PageObjects(テスト用のWebサイトの場合)などは非常に重要です。テスト(SUT)と実際のテストの間に抽象層を設けることが非常に重要です。 is(ビジネスロジックのアサーション)。より優れたアサーションを取得するために、Hamcrestを使用できます。javasの継承/インターフェースを利用して、繰り返しを減らし、共通性を強化します。
ほとんど忘れて、Test Data Builder Patternも使用します。これをTestNGのデータプロバイダーアノテーションと組み合わせると、非常に便利です。