1. ホーム
  2. java

[解決済み] assert vs. JUnitアサーション

2023-04-19 14:56:09

質問

今日、JUnitのテストケースで、JUnitのアサーションの代わりにJavaのアサーションが使われているのを見ましたが、どちらを選ぶべきか、大きなメリットとデメリットがありますか?

どのように解決するのですか?

JUnit4では、JUnitのassertが投げる例外(実際にはError)は、javaの assert キーワード (AssertionError) によってスローされるエラーと同じであるため、これはまさに assertTrue と同じで、スタックトレース以外では違いが分かりません。

とはいえ、アサートはJVMの特別なフラグで実行しなければならず、JUnitテストが実行されたときに誰かがそのフラグでシステムを構成するのを忘れたために、多くのテストがパスしたように見えることがあります - 良くないことです。

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

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