89

今日、JUnit アサーションの代わりに Java アサーションを使用した JUnit テスト ケースを見ました。

4

6 に答える 6

100

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

そうは言っても、アサートは JVM で特別なフラグを使用して実行する必要があるため、JUnit テストの実行時に誰かがそのフラグを使用してシステムを構成するのを忘れたという理由だけで、多くのテストがパスしたように見えます。これは良くありません。

一般に、このため、JUnit を使用するassertTrue方が良い方法であると主張します。これは、テストが実行されることを保証し、一貫性を保証するため ( assertThatJava キーワードではないまたは他のアサートを使用する場合もあります)、JUnit の動作がアサートする場合将来変更する必要がある (ある種のフィルターやその他の将来の JUnit 機能へのフックなど)、コードはそれを活用できるようになります。

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

于 2010-06-03T13:38:43.583 に答える
26

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

于 2010-06-03T13:29:56.900 に答える
21

テストが失敗すると、より多くの情報が得られます。

assertEquals(1, 2);結果はjava.lang.AssertionError: expected:<1> but was:<2>

assert(1 == 2);結果はjava.lang.AssertionError

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

于 2011-06-07T14:57:11.283 に答える
8

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

于 2012-04-27T21:36:38.047 に答える
0

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

于 2010-06-03T13:30:52.280 に答える
0

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

于 2010-06-03T14:09:08.923 に答える