私はデータベースに多くを使用するJavaアプリケーションを持っていjava.sql.Connectionます。
データベースが利用できない場合、サービスが適切なエラーコードを返すことをテストしたいと思います(HTTP 500や503などの一時的な問題と永続的な問題を区別します)。
テストのために、私のアプリケーションは、埋め込まれたローカルのインメモリh2データベースに接続します。アプリケーションはこれを認識していません。私の統合テストのみが認識しています。
データベースへの書き込みを決定論的に失敗させるにはどうすればよいですか?たとえば、コミットにフックしてカスタムをスローさせるにはどうすればよいSQLExceptionですか?すべての接続に影響を与え、アプリケーションに再接続ロジックを実行させるテストコードで、グローバルな「データベースが利用できません」ブール値が必要です。
(私はプロキシConnectionと入力から始めましif(failFlag) throw new MySimulateFailureException()たcommit();しかしこれはうまくいきませんでしたPreparedStatement.executeUpdate();私もプロキシに着手する前にPreparedStatement-それはたくさんの方法です!-私はより良い方法を教えられたいです...)