SQL実行結果の正否ではなく発行したSQL文自体が意図どおりかでテストする
これは興味深かった。
- [Java]MockRunnerのJDBC Mockを使ってみた 2010-12-15 - 新・たけぞう瀕死の日記
- [Java]MockRunnerのJDBC Mockの便利機能 2010-12-19 - 新・たけぞう瀕死の日記
はしょって言うと、
- junitを使った自動テストでは、前準備としてDBにデータをつっこんでおき、テスト対象クラスを実行してそこでのSQL実行結果が前準備どおりのデータとマッチするかでテストの正否を判定する、っていうのがよくある手法
- でもそれだと、前準備としてDBにデータをつっこむための、そのデータを準備すること自体が、意外と面倒。 (テーブル間に外部キーが張り巡らされてたりするとガチでめんどい)
- なら、「発行されたSQL文自体が正しいかどうか」でAssertすればいいじゃない。
みたいな。
筆者も前に似たようなことで悩んだ。発行したSQL文自体をデバッグログとして出したくなったのだが、いくらやっても「select a,b,c from foo where bar = ? 」を出すのが限界だった。 ほしいのは「select a,b,c from foo where bar = 'hogehoge'」、 つまり、?(プレースホルダ)の部分にも値がつっこまれた状態でのSQL文をDBに発行する前に取りだすというのが、えらい面倒すぎて断念した覚えがある。
jdbcドライバの近辺にまでもぐりこまないと無理なはずなんだが、どうやらMockRunnerのJDBC Mockというやつはそれをやってのけているんじゃなかろうか。興味深い。