126

仕事では、現在もJUnit3を使用してテストを実行しています。新しいテストを作成するためにJUnit4への切り替えを検討していますが、しばらくの間TestNGに注目しています。JUnit 4またはTestNGのいずれかで、どのような経験がありますか。また、非常に多くのテストでどちらがうまく機能するように思われますか?機能テストは幅広い側面をカバーしており、結果を得るにはさまざまな方法で作成する必要があるため、テストの作成に柔軟性を持たせることも重要です。

古いテストはうまく機能するため、書き直されることはありません。新しいテストで私が見たいのは、テストの記述方法の柔軟性、自然なアサーション、グループ化、および簡単に分散されたテストの実行です。

4

12 に答える 12

66

私は両方を使用しましたが、既存のテストを新しい形式に書き直すことを実際に検討するべきではないというJustinStandardに同意する必要があります。決定に関係なく、両方を実行するのは非常に簡単です。TestNGは、JUnitよりもはるかに構成可能であるように努めていますが、最終的には両方とも同等に機能します。

TestNGには、テストを特定のグループとしてマークし、特定のグループのすべてのテストを簡単に実行したり、特定のグループのテストを除外したりできる優れた機能があります。したがって、「遅い」グループのように実行速度が遅いテストにマークを付け、迅速な結果が必要な場合は無視することができます。彼らのドキュメントからの提案は、新しいファイルをチェックインするたびに実行する必要がある「チェックイン」テストとしてサブセットをマークすることです。JUnitでそのような機能を見たことがありませんが、それがない場合は、 t本当にそれを見逃します。

高い構成のすべての主張のために、私は数週間前に私がやりたいことをすることができなかったコーナーケースに遭遇しました...それが何であるかを思い出せたらいいのですが、私はそれを持ち出したいと思いましただからあなたはそれが完璧ではないことを知っています。

TestNGの最大の利点はアノテーションです...とにかくJUnitがバージョン4で追加しました。

于 2008-08-09T07:00:34.087 に答える
20

まず、最新の流行に合わせてすべてのテストを書き直さないでください。Junit3は完全に機能し、4での注釈の導入は、(私の意見では)あまり購入しません。あなたたちがテストを書くことははるかに重要です、そしてそれはあなたがそうするように聞こえます。

最も自然に見えるものを使用し、作業を完了するのに役立ちます。

TestNG b/cについてコメントできません。使用していません。ただし、どのルートを使用するかに関係なく、JUnit / TestNG / DBUnit/EasyMockの優れたラッパーであるunitilsをお勧めします。(上記のすべてのフレーバーをサポートします)

于 2008-08-09T06:33:50.787 に答える
18

約1年前、同じ問題が発生しました。私はしばらくの間、どちらの動きが優れているかを検討しましたが、最終的にTestNGには「キラー機能」がないことに気づきました。それは素晴らしく、JUnit 4にはないいくつかの機能がありますが、それらは必要ありません。
多くのテストを書き続けてほしいので、TestNGを知っている間、人々にテストを書くことに不快感を感じさせたくありませんでした。
また、JUnitはJavaの世界ではほとんどデファクトスタンダードです。箱からそれをサポートしないまともなツールはありません、あなたはウェブ上で多くの助けを見つけることができます、そして彼らはそれが生きていることを示す多くの新機能を過去1年間に追加しました。

私たちはJUnitに固執することを決心し、決して振り返りませんでした。

于 2008-08-09T09:33:28.257 に答える
18

TestNGの最大の魅力は、サポートテストグループと、さらに重要なことですが、テストグループの依存関係です(テストをグループに依存しているとマークすると、依存グループが失敗したときにテストの実行がスキップされます)。

TestNGの他の大きな魅力は、テストパラメーター、データプロバイダー、アノテーショントランスフォーマー、そして何よりも活気に満ちたレスポンシブなユーザーコミュニティです。

表面的には、上記のTestNGs機能のすべてが必要であるとは思わないかもしれませんが、テストにもたらす柔軟性を理解し始めると、JUnitにどのように対処したのか不思議に思うでしょう。

(免責事項-私はJUnit 4.xをまったく使用していないので、そこでの進歩や新機能について実際にコメントすることはできません)。

于 2008-08-18T10:09:42.563 に答える
18

上記のすべてに乾杯。私が個人的に TestNG でより気に入っている他のいくつかの点は次のとおりです。

  1. for TestNG はクラスの作成後に行われるため、その@BeforeClass中でクラスの静的メソッドを呼び出すことしかできないという制約はありません。

  2. 並列テストとパラメーター化されたテスト、おそらく私には十分な人生がありません...しかし、ドライバー名をパラメーターとして受け入れて、1セットのSeleniumテストを書くだけです。次に、IE、FF、および Chrome ドライバー用に 1 つずつ、3 つの並列テスト グループを定義し、レースを観察します。最初は 4 でしたが、あまりにも多くのページでHtmlUnit何らかの理由でドライバーを壊してしまいました。

ええ、おそらくその人生を見つける必要があります。;)

于 2010-08-19T13:52:21.260 に答える
11

今日出会ったものをシェアしたいと思います。ビルトインのパラメータ化されたランナーは、TestNG と比較して、Junit4 では非常に粗雑であることがわかりました (各フレームワークには長所があることはわかっていますが、それでもまだです)。Junit4 アノテーション @parameters は、1 セットのパラメーターに制限されています。同じテスト クラスで機能の有効な動作と無効な動作をテストしているときに、この問題が発生しました。そのため、最初に見つかった public の static アノテーション付きメソッドが使用されますが、それらは任意の順序で見つかる可能性があります。これにより、不必要に異なるクラスを作成することになります。ただし、TestNG は、すべてのメソッドに対してさまざまな種類のデータ プロバイダーを提供するクリーンな方法を提供します。したがって、有効/無効なデータを別々に配置して、同じテストクラスで有効な方法と無効な方法で同じコードユニットをテストできます。私はTestNGで行きます。

于 2009-08-05T12:24:34.000 に答える
8

また、TestNG のもう 1 つの利点は、並列テストのサポートです。マルチコアの時代では重要だと思います。

また、両方のフレームワークを使用しました。しかし、私はアサーションにハムクレストを使用しています。Hamcrest を使用すると、独自の assert メソッドを簡単に作成できます。だから代わりに

assertEquals(operation.getStatus(), Operation.Status.Active);

あなたは書ける

assertThat(operation, isActive());

これにより、テストでより高いレベルの抽象化を使用する機会が得られます。これにより、テストがより堅牢になります。

于 2009-01-10T12:10:43.623 に答える
7

JUnit 4 Vs TestNG – mkyong.com による比較 (2013 年に更新)。

結論: Java プロジェクトのコア ユニット テスト フレームワークとして TestNG を使用することをお勧めします。TestNG は、パラメーター化テスト、依存関係テスト、およびスイート テスト (グループ化の概念) においてより進んでいるためです。

TestNG は、機能的で高レベルのテストと複雑な統合テストを目的としています。その柔軟性は、大規模なテスト スイートで特に役立ちます。

さらに、TestNG は JUnit4 のコア機能全体もカバーしています。もう JUnit を使用する理由はありません。

簡単に言えば、TestNG = JUnit + もっとたくさん。それで、なぜ議論するのですか?行ってTestNGを手に入れてください:-)

詳細な比較については、こちらを参照してください。

于 2016-06-29T22:38:50.827 に答える
5

Mike Stone の返信にいくつか追加します。

1) TestNG のグループを最も頻繁に使用するのは、テスト スイートで単一のテスト メソッドを実行する場合です。このテストをグループ「phil」に追加して、このグループを実行するだけです。JUnit 3 を使用していたとき、「スイート」メソッドで実行したいメソッド以外のすべてのメソッドのエントリをコメント アウトしていましたが、チェックインする前にコメントを外すのを忘れていました。グループを使用すると、この問題はなくなりました。

2) テストの複雑さに応じて、JUnit3 から TestNG へのテストの移行は、sed を使用してある程度自動的に実行でき、すべての TestNG アサート メソッドを静的にインポートする TestCase を置き換える基本クラスを作成します。

JUnit から TestNG への移行に関する情報は、ここここにあります。

于 2008-09-05T19:44:40.967 に答える
4

TestNG が本当にはるかに強力である理由についての私の意見:

1.  JUnit still requires the before/after class methods to be static, which limits
    what you can do prior to the running of tests, TestNG never has this issue.

2.  TestNG @Configuration methods can all take an optional argument to their 
    annotated methods in the form of a ITestResult, XmlTest, Method, or 
    ITestContext.  This allows you to pass things around that JUnit wouldn't 
    provide you.  JUnit only does this in listeners and it is limited in use.

3.  TestNG comes with some pre-made report generation classes that you can copy
     and edit and make into your own beautiful test output with very little 
     effort. Just copy the report class into your project and add a listener 
     to run it.  Also, ReportNG is available.

4.  TestNG has a handful of nice listeners that you can hook onto so you can do
     additional AOP style magic at certain phases during testing.
于 2014-04-06T16:56:18.493 に答える
3

あなたの質問は私には二重に見えます。1 つは 2 つのテスト フレームワークを比較したい、もう 1 つはテストを簡単に実装したい、自然なアサーションを持ちたい、などです。

わかりました。まず、JUnit は機能面で TestNG に追いついています。v4 でいくらかギャップを埋めていますが、私の意見では十分ではありません。アノテーションやデータプロバイダーなどは、TestNG の方がはるかに優れています。また、TestNG にはテストの依存関係、グループ化、および順序付けがあるため、テストの実行に関してより柔軟です。

JUnit では、特定の before/after メソッドを静的にする必要があり、テストの実行前にできることが制限されますが、TestNG にはこの問題はありません。

TBH、統合/自動化テストに焦点を合わせない限り、ほとんどの場合、2 つのフレームワークの違いはあまり意味がありません。私の経験によると、JUnit は単体テスト用にゼロから構築されており、現在はより高いレベルのテストに向けて推進されており、IMO は JUnit をジョブにとって不適切なツールにしています。TestNG は単体テストでうまく機能し、その堅牢なデータ提供と優れたテスト実行能力により、統合/自動化テスト レベルでさらにうまく機能します。

さて、私が信じているのは別の問題であり、適切に構造化され、読みやすく、保守可能なテストを作成する方法です。このほとんどはご存知だと思いますが、Factory PatternCommand PatternPageObjects (テスト Web サイトの場合) などは非常に重要です。テスト (SUT) と実際のテストの間に抽象化の層を設けることが非常に重要です。 is (ビジネス ロジックのアサーション)。より優れたアサーションを得るために、Hamcrestを使用できます。javas 継承/インターフェースを利用して、繰り返しを減らし、共通性を強化します。

ほとんど忘れていましたが、Test Data Builder Patternも使用してください。これを TestNG の dataprovider アノテーションと組み合わせると非常に便利です。

于 2013-06-12T09:50:46.390 に答える