ほげにっき

hogedigoの日記

シーケンスのテスト事件

〜愚痴です。スンマセン〜


シーケンスのユニットテストはコツがいる。初期値によって値が左右されるし、実行する度に結果が変わる。テスト後ロールバックが出来ないし。
みんなどうやってんのかな?

そんな悩みを抱えつつ起きた事件。


彼「シーケンス取得するDAOのユニットテストってどうすればいいっすかねぇ?」
私「dbUnitでシーケンスの初期化は出来なかった?」
彼「やってみたけど出来ませんでした。」
私「じゃあ、テスト開始時にJDBCで対象シーケンス取得しておいて、DAOで取得した時にプラス1されていることを確かめれば?」
彼「JDBCで取得ってどうやればいいですか?」
私「こうすればJDBCのconnection取得出来るから・・やってみて」
彼「すみません。わかりません」
私「うーん。じゃあ、その部分書いてあげるから。」
本来ならば勉強の為に自分でやらせるのだが、プロジェクトも切羽詰まっていて面倒だったので自分でガリガリ書く。
彼「ありがとうございます。」

〜次の日〜
ソースを見ると、昨日書いてあげたコードが一切消えている。DAOから連続して取得するコードになっている。
私「昨日僕が書いたコード、なくなってない?」
彼「JDBCで書くと冗長だったのでDAOで取得しました。すごくシンプルになりましたよ」
私「いや、シンプルになったのはいいけど、これじゃDAOのテストにならんでしょ?」
彼「+1されてますよ」
私「でも、使用されているシーケンスが正しいかどうかは保証できる?」
彼「あ・・・」


いやね、間違い自体は別にいいのよ。気持ちわかるし。テストコードをリファクタリングしてったら、いつの間にか本番コードみたいになっちゃってテストにならなくなってたりとか・・慣れないウチはよくありますよ。なんでJDBCでわざわざ書いたのか、こちらも説明不足だったかもしれないしね。
悲しいのは、せっかく書いてあげたソースが一日でバッサリ消えてたことですよ。相談もなしに。
たぶん僕が書いてる横で「めんどくせーなー、もっとシンプルに書けるのに」って思ってたんでしょ。だったらその時に口に出して欲しかった。