今日、JUnitアサーションの代わりにJavaアサーションを使用したJUnitテストケースを確認しました。一方を優先する重要な長所または短所はありますか?
JUnit4では、JUnitアサートによってスローされる例外(実際にはエラー)はJava assert
キーワード(AssertionError)によってスローされるエラーと同じであるため、assertTrue
とまったく同じであり、スタックトレース以外は違いがわからなかった。
とはいえ、アサートはJVMで特別なフラグを使用して実行する必要があり、JUnitテストの実行時に誰かがそのフラグを使用してシステムを構成するのを忘れたため、多くのテストが合格したように見えます。
一般に、このため、JUnit assertTrue
を使用する方が良いと思います。テストの実行を保証し、一貫性を保証するためです(assertThat
またはJavaキーワードではない他のアサートを使用する場合があります) )そして、JUnitアサートの動作が将来変更される場合(何らかのフィルターまたは他の将来のJUnit機能へのフックなど)、コードはそれを活用できます。
Javaのassertキーワードの本当の目的は、実行時のペナルティなしでそれをオフにできるようにすることです。これは単体テストには適用されません。
JUnitアサーションは、組み込みのassert
ステートメントよりも豊富なAPIを提供し、さらに重要なことには、assert
と異なり、明示的に有効にする必要がないため、-ea
JVM引数。
テストが失敗すると、さらに情報が得られます。
assertEquals(1, 2);
はJava.lang.AssertionError: expected:<1> but was:<2>
になります
対
assert(1 == 2);
はJava.lang.AssertionError
になります
assertEquals
にメッセージ引数を追加すると、さらに多くの情報を取得できます
テストケースではJUnitアサートを使用し、コードではJavaのアサートを使用します。言い換えれば、実際のコードにはJUnitの依存関係がないことは明らかです。テストの場合は、JUnitのバリエーションを使用する必要があり、アサートすることはありません。
JUnitを使用している場合は、JUnitアサーションを使用する必要があります。 assertTrue()
は基本的にassert
と同じですが、それ以外の場合はなぜJUnitを使用するのでしょうか?
これは、光沢のある新しいものだけを使用する場合は当てはまらないかもしれませんが、アサートは1.4SEまでJavaに導入されませんでした。したがって、古いテクノロジーの環境で作業する必要がある場合互換性の理由からJUnitに向かって。