今日、JUnit アサーションの代わりに Java アサーションを使用した JUnit テスト ケースを見ました。
6 に答える
JUnit4 では、JUnit アサートによってスローされる例外 (実際にはエラー) は、Java キーワード (AssertionError) によってスローされるエラーと同じであるため、スタック トレース以外assert
はまったく同じであり、違いはわかりません。assertTrue
そうは言っても、アサートは JVM で特別なフラグを使用して実行する必要があるため、JUnit テストの実行時に誰かがそのフラグを使用してシステムを構成するのを忘れたという理由だけで、多くのテストがパスしたように見えます。これは良くありません。
一般に、このため、JUnit を使用するassertTrue
方が良い方法であると主張します。これは、テストが実行されることを保証し、一貫性を保証するため ( assertThat
Java キーワードではないまたは他のアサートを使用する場合もあります)、JUnit の動作がアサートする場合将来変更する必要がある (ある種のフィルターやその他の将来の JUnit 機能へのフックなど)、コードはそれを活用できるようになります。
Java での assert キーワードの本当の目的は、実行時のペナルティなしでオフにできるようにすることです。これは単体テストには当てはまりません。
JUnitアサーションは、組み込みステートメントよりも豊富なAPIを提供し、さらに重要なことに、 JVM引数を必要とするassert
とは異なり、明示的に有効にする必要がないため、 JUnitアサーションを好みます。assert
-ea
テストが失敗すると、より多くの情報が得られます。
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を使用するのですか?
これは、光沢のある新しいものだけを使用する場合には当てはまらないかもしれませんが、assert は 1.4SE まで Java に導入されていませんでした。したがって、古いテクノロジを使用する環境で作業する必要がある場合は、互換性の理由から JUnit に頼ることができます。