2005-09-04

ユニットテスト始めました

今までもテストコードは書いていたんだけど、使い捨てだったのでこれはいかんなぁと思っていたのと、確認は人間の目で行っていて、成否をいちいち人間が判断するという効率の悪さが気になっていたので、テストツールを使うことにした。

とりあえず Ruby の Test::Unit から始めた。うーん最初はやはりかなり邪魔くさい。あと、assert にはテストしたいメソッドの結果が直接返ってこないとダメなのかと思いこんでいたけど、たぶんそうじゃないんだな。確認用のメソッドを作ってそっちを呼んでも、とりあえず問題はないと判断。1

ユニットテストの自動化のメリットとして

テストしやすい書き方をするから書き方のバラつきが少なくなる

てな記述を見かけるんだけど、これはほんとかもしれないと思った。こういう自動化ツールは中途半端に使っても嬉しくなく、徹底的に依存しちゃう方が効果は大きい。そうすると、確かにテストしやすいコードに自然と直ってくる。ような気がする。まだコードそのものが変わっちゃうほど使い込んでいないけど、このなんかこう、居心地の悪さは、慣れないことをやっているとき特有のもので、慣れると気持ちよくなりそうなそんな期待を感じることのできる気持ち悪さだ。cvs なんかを使い始めるときもこんな感じかな。最初のうちは面倒なだけで必要性を感じられないんだけど、慣れると使ってないと気持ち悪くなるところが。

ただ、テストコードを書きにくいものはどうしても残りそうだし、とりあえず Web 上を見て回ってもそれに対する有効な回答は見つけられなかった。なんか、そのうちうまく書けるようになる、みたいなちょっと騙されたような感じ。(まぁよほど経験を積んだうえでないと具体的にテストしにくいものはこうする、なんてことは書けないもんな。)

テストコードはどこに置いておくのがいいんだろう? 別ディレクトリに分けてリポジトリにつっこんでおくのがいいのかな? コンパイラ言語なら中に書いちゃって ifdef で切り分け、なんてのも ok なんだろうけど、LL の場合はそうはいかないもんな。

これしかし、自分で書いたものを自分でチェックしてるだけなんだけど、プログラムが自動で成否を判断してオッケーって言ってくれてるような感じが嬉しくて面白い。錯覚なんだけども、面白いと感じることができる要素があれば続けられそう。

  1. この辺、assert の書き方のパターンがどこかにいっぱいあると嬉しいかな。 

About

例によって個人のなんちゃらです