assertの使い方でお悩みなあなたへ。この記事ではJavaアサーションの使い方をサンプルを交えてご紹介します。これを見れば、assertの使い方がわかるようになります。
assertは、条件式がfalseの場合に java.lang.AssertionError
を発生させる。
アサーションはデフォルトでは無効になっている。アサーションを有効にするには、Javaアプリケーション実行時に javaコマンドの引数に「-enableassertions」または「-ea」オプションを指定する。
$ java -enableassertions Example
$ java -ea Example
assert文の構文を次に示す。
assert expression
assert expression : message
java.lang.AssertionError
例外がスローされる。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 メソッドに渡された引数の有効性チェックは常に行うべきで、アサーション構文を有効にしたときのみ行えばよい処理ではない。
さらに、引数の有効性チェックに失敗したときは java.lang.IllegalArgumentException などの適切な例外をスローすべきで、アサーション構文がスローする java.lang.AssertionError
では曖昧すぎる。
java.lang.AssertionErrotクラスには、次に示すメソッドがある。
メソッド | 説明 |
---|---|
fillInStackTrace | 実行スタック・トレースを埋め込む。 |
getCause | 原因を返す。 |
getLocalizedMessage | ローカライズされたメッセージを返す。 |
getMessage | 詳細メッセージ文字列を返す。 |
getStackTrace | スタック・トレース要素の配列を返す。 |
getSuppressed | 抑制された例外をすべて含む配列を返す。 |
initCause | 原因を指定した値で初期化する。 |
printStackTrace | バックトレースを出力する。 |
toString | 短い記述を返す。 |
アサーション・エラーの詳細メッセージ文字列を返す。
public String getMessage()
アサーション・エラーのバックトレースを出力する。
public void printStackTrace()
public void printStackTrace(PrintStream s)
public void printStackTrace(PrintWriter s)
引数を指定しない場合、バックトレースは標準エラー・ストリームへ出力される。
JavaのテストフレームワークであるJUnitのorg.unit.Assertクラスには、テストの記述に役立つアサーション・メソッドのセットが含まれている。
Oracle (2018) AssertionError (Java Platform SE 8)
Oracle (2021) The java Command