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

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

Javaアサーションとは

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

有効化

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

$ java -enableassertions Example.class
$ java -ea Example.class

assertの使い方

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

使い方

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

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

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

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

$

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

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

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

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

$

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)