テストでわざと SQLException を発生させる[プログラミング]
(2017-02-01 15:32:55) by shinoda


Eclipse 上での Java 開発で、(多分、単体テストで) try {...} catch (SQLException e) {...} の処理を確認したい時。

Query の実行の前にブレークして、Eclipse の「変数」窓で SQL 文を書き換えて(例えばテーブル名などを存在しないものに変更して)エラーを起こす・・・という方法だと SQLSyntaxErrorException が発生して、まあ、それでも SQLException として catch されるのでテスト的には十分だと思うのだが、どうしても SQLException で throw させたいということもあるだろう。

例えば、設計者から「catch SQLException のテストなんだから、エビデンスのログにも SQLSyntaxErrorException じゃなく SQLException って出てなきゃ認めない」みたいな意地悪をされた場合とか(^^;;;;;

となると、「SQLException ってどうやって起こすの?」ってことだよね(^^;

そもそも、JDK6 のJDBC4.0 から、JDBC の返す SQLException は

SQLNonTransientException(一時的でない例外)
SQLDataException (一時的でない例外)データ型の例外
SQLFeatureNotSupportedException (一時的でない例外)サポートされていない時の例外
SQLIntegrityConstraintViolationException (一時的でない例外)制限違反(外部キーの異常など)
SQLInvalidAuthorizationException (一時的でない例外)権限違反
SQLNonTransientConnectionException (一時的でない例外)一時的でない接続例外
SQLSyntaxErrorException (一時的でない例外)SQLの構文例外
SQLTransientException(一時的な例外)
SQLTimeoutException (一時的な例外)SQLタイムアウト
SQLTransactionRollbackException (一時的な例外)ロールバッグ例外
SQLTransientConnectionException (一時的な例外)一時的な接続例外
SQLRecoverableException(回復可能な例外)

このように細分化されたんで、素の「SQLException」って発生しないんじゃないの?

となると強引に SQLException を発生させないといけないわけで、

[ウィンドウ]→[ビューの表示]→[表示] で、VB のイミディエイトウィンドウみたいなの開いて(こんな書き方したら識者の偉い人に怒られる(^^; ちなみに、「コンソール」や「タスク」と同じ窓でタブ切替になるよ)、ここに、

throw new SQLException("UNIT TEST");

って書く。

プログラムの実行を適当なところ(Query の実行直後とか)にブレークさせたら、この throw new SQLException("UNIT TEST"); を選択し、右ボタンメニューから「実行」を選択。
これで、プログラムは SQLException で終了する。

この方法しかないよねえ・・・

コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8