web-dev-qa-db-ja.com

assertとJUnitアサーション

今日、JUnitアサーションの代わりにJavaアサーションを使用したJUnitテストケースを確認しました。一方を優先する重要な長所または短所はありますか?

72
Robert

JUnit4では、JUnitアサートによってスローされる例外(実際にはエラー)はJava assertキーワード(AssertionError)によってスローされるエラーと同じであるため、assertTrueとまったく同じであり、スタックトレース以外は違いがわからなかった。

とはいえ、アサートはJVMで特別なフラグを使用して実行する必要があり、JUnitテストの実行時に誰かがそのフラグを使用してシステムを構成するのを忘れたため、多くのテストが合格したように見えます。

一般に、このため、JUnit assertTrueを使用する方が良いと思います。テストの実行を保証し、一貫性を保証するためです(assertThatまたはJavaキーワードではない他のアサートを使用する場合があります) )そして、JUnitアサートの動作が将来変更される場合(何らかのフィルターまたは他の将来のJUnit機能へのフックなど)、コードはそれを活用できます。

Javaのassertキーワードの本当の目的は、実行時のペナルティなしでそれをオフにできるようにすることです。これは単体テストには適用されません。

88
Yishai

JUnitアサーションは、組み込みのassertステートメントよりも豊富なAPIを提供し、さらに重要なことには、assertと異なり、明示的に有効にする必要がないため、-ea JVM引数。

26
Adamski

テストが失敗すると、さらに情報が得られます。

assertEquals(1, 2);Java.lang.AssertionError: expected:<1> but was:<2>になります

assert(1 == 2);Java.lang.AssertionErrorになります

assertEqualsにメッセージ引数を追加すると、さらに多くの情報を取得できます

16
starmer

テストケースではJUnitアサートを使用し、コードではJavaのアサートを使用します。言い換えれば、実際のコードにはJUnitの依存関係がないことは明らかです。テストの場合は、JUnitのバリエーションを使用する必要があり、アサートすることはありません。

6

JUnitを使用している場合は、JUnitアサーションを使用する必要があります。 assertTrue()は基本的にassertと同じですが、それ以外の場合はなぜJUnitを使用するのでしょうか?

0
CheesePls

これは、光沢のある新しいものだけを使用する場合は当てはまらないかもしれませんが、アサートは1.4SEまでJavaに導入されませんでした。したがって、古いテクノロジーの環境で作業する必要がある場合互換性の理由からJUnitに向かって。

0
Dan Coates