今日、JUnitアサーションの代わりにJavaアサーションを使用したJUnitテストケースを見ました。一方を他方よりも優先するという重大な長所または短所はありますか?
回答:
JUnit4では、JUnitアサートによってスローされる例外(実際にはError)は、javaassert
キーワード(AssertionError)によってスローされるエラーと同じであるためassertTrue
、スタックトレース以外はまったく同じであり、違いはわかりません。
そうは言っても、アサートはJVMで特別なフラグを使用して実行する必要があり、JUnitテストの実行時に誰かがそのフラグを使用してシステムを構成するのを忘れたという理由だけで、多くのテストに合格したように見えます。
一般に、このため、JUnitを使用するassertTrue
方が良い方法であるとassertThat
主張します。これは、テストの実行が保証され、一貫性が保証され(Javaキーワードではない他のアサートを使用する場合もあります)、JUnitの動作がアサートするかどうかを保証するためです。将来変更された場合(ある種のフィルターや他の将来のJUnit機能へのフックなど)、コードはそれを活用できるようになります。
Javaのassertキーワードの本当の目的は、ランタイムペナルティなしでそれをオフにできるようにすることです。これは単体テストには適用されません。
テストが失敗すると、より多くの情報が得られます。
assertEquals(1, 2);
結果は java.lang.AssertionError: expected:<1> but was:<2>
vs
assert(1 == 2);
結果は java.lang.AssertionError
メッセージ引数をに追加すると、さらに多くの情報を取得できます assertEquals
assert 1==2: "1 is not 2";
。
assert
正しさを確認するために-が好ましいかもしれないでしょうパフォーマンスに影響を与えるので、最高のデフォルトでは無効になっています。ただし、私の経験では、ほとんどのアサーションは常にオンになっている必要があります。
テストケースではJUnitアサーションを使用し、コードではjavaのアサーションを使用すると思います。言い換えれば、実際のコードは、明らかなようにJUnitの依存関係を持つことはなく、テストの場合は、アサートではなく、そのJUnitのバリエーションを使用する必要があります。
JUnitを使用している場合は、JUnitアサーションを使用する必要があります。assertTrue()
基本的にはと同じですがassert
、それ以外の場合はなぜJUnitを使用するのですか?
Assert
と、より多くのボイラープレートが必要になります。assert
JUnitがないと、フレームワーク全体を作成する必要があります。