Javaアサーションとは? assertの使い方

assertの使い方でお悩みなあなたへ。この記事ではJavaアサーションの使い方をサンプルを交えてご紹介します。これを見れば、assertの使い方がわかるようになります。

Javaアサーションとは

assertは、条件式がfalseの場合に java.lang.AssertionError を発生させる。

有効化

アサーションはデフォルトでは無効になっている。アサーションを有効にするには、Javaアプリケーション実行時に javaコマンドの引数に「-enableassertions」または「-ea」オプションを指定する。

$ java -enableassertions Example
$ java -ea Example

構文

assert文の構文を次に示す。

assert expression
assert expression : message
expression
boolean値を返す条件式を指定する。ここに指定した条件式の評価がfalseだった場合、 java.lang.AssertionError 例外がスローされる。
message
アサーションの詳細メッセージを指定する。ここに指定したメッセージが java.lang.AssertionError クラスのコンストラクタに引数として渡される。

使い方

Javaにおけるassertの使い方を次に示す。

public class Example {
  public static void main(String[] args) {
    assert args.length > 0;
  }
}

上記Javaアプリケーションの実行結果を示す。

$ java -ea Example
Exception in thread in "main" java.lang.AssertionError
        at Example.main(Example.java:3)

詳細メッセージを指定したassertの使用例を示す。

public class Example {
  public static void main(String[] args) {
    assert args.length > 0 : "引数を指定してください。";
  }
}

上記Javaアプリケーションの実行結果を示す。

$ java -ea Example
Exception in thread in "main" java.lang.AssertionError: 引数を指定してください。
        at Example.main(Example.java:3)

publicメソッドの引数チェックにアサーションを使わない

public メソッドに渡された引数の有効性チェックにアサーション構文を使わないこと。 誰でも呼び出せる public メソッドに渡された引数の有効性チェックは常に行うべきで、アサーション構文を有効にしたときのみ行えばよい処理ではない。 さらに、引数の有効性チェックに失敗したときは java.lang.IllegalArgumentException などの適切な例外をスローすべきで、アサーション構文がスローする java.lang.AssertionError では曖昧すぎる。

AssertionError

java.lang.AssertionErrotクラスには、次に示すメソッドがある。

AssertionErrotクラスのメソッド
メソッド 説明
fillInStackTrace 実行スタック・トレースを埋め込む。
getCause 原因を返す。
getLocalizedMessage ローカライズされたメッセージを返す。
getMessage 詳細メッセージ文字列を返す。
getStackTrace スタック・トレース要素の配列を返す。
getSuppressed 抑制された例外をすべて含む配列を返す。
initCause 原因を指定した値で初期化する。
printStackTrace バックトレースを出力する。
toString 短い記述を返す。

getMessage

アサーション・エラーの詳細メッセージ文字列を返す。

public String getMessage()

printStackTrace

アサーション・エラーのバックトレースを出力する。

public void printStackTrace()
public void printStackTrace(PrintStream s)
public void printStackTrace(PrintWriter s)

引数を指定しない場合、バックトレースは標準エラー・ストリームへ出力される。

JUnit

JavaのテストフレームワークであるJUnitのorg.unit.Assertクラスには、テストの記述に役立つアサーション・メソッドのセットが含まれている。

参考文献

Oracle (2018) AssertionError (Java Platform SE 8)

Oracle (2021) The java Command