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 で終了する。
この方法しかないよねえ・・・
コメントする