バッチのテストの難しさ

さてかなり久しぶりの投稿です。


自分はかなり詰めが甘いほうで良く下らないバグをだします。ですので最近はテストコードの信者になりつつあります。
おそらく、RailsというかRubyがテストが良く書かれる文化だとは感じていますが、バッチが一番の曲者。
View側も最近はCapybaraをはじめとして受け入れテストも可能になり、またJavaScriptのテストツールも整いつつあります。
これにより以前ではかなりテストし辛い部分までテストコードを書くことが可能になっています。またJenkinsにより自動テストの環境が整い、さらにはVagrantなどでDevOpsも可能になり、私がエンジニアになった約10年ほど前とは根本的に異なる時代になって来ました。


ところが、個人的に難しいと考えているのがバッチです。
このバッチのテストが非常に難しい。自動テストを正しく行おうとすれば、現実の全データでテストを行うのが理屈上正しいのですが、バッチの実行を行うと、数日から1週間は必要という開発としてはまずありえない時間が必要になります。
Factorygirlを使ってダミーデータを用意すれば良い? それはそうなのですが、ダミーデータと言えども正常パターン、異常パターンを作成するのはまず無理。用意出来るならばすでに用意してテストもしています。


また、バッチは長年の経験を集めた実装で、また実装がテストしやすいようにはなっていない。必要な環境変数が多々必要だったり、特定の順番で複数のバッチを動作させることが前提だったり。また、リファクタリングも難しくテストコードも非常に書きづらい。
言語に限らずバッチはどこの環境でもこのような難しさを秘めている場合がほとんどな気がします。
ここ最近始めた方法として、バッチの中にtestというメソッドを用意して、最低限の動作を行う処理を書いておきテストを行う、という非常にいい加減な事をしてお茶を濁しています。


良い方法がないかこれからも探していきますが、私程度では解決方法は見つからず...。
どうしたものでしょうかね。