2008-03-05
rcovは行カバレッジのツールなので、次のようなコードでは問題なくカバレッジを判定できる。
@itemがnilであるケースがテストされていなければ2行目のカバレッジは赤だ。
if @item.nil?
return render(:nothing => true, :status => '404 Not Found')
end
しかし次のようなコードでは if の結果がどちらに分岐してもカバーしているとみなされる。
@itemがnilであるケースがテストされていなくてもカバレッジはパスする。
return render(:nothing => true, :status => '404 Not Found') if @item.nil?
ということなのでif修飾子を使うのはやめた方がよい。おわり。
.
.
.
というのはウソで、カバレッジの厳密さにこだわってコードの書き方を変える必要はないと思う。
カバレッジは所詮目安なんだから。
あと100%である必要もないし、100%であることを強制するのはナンセンス。
中身の薄いテストでも100%にするだけならできるわけなので。
でもまあTDDで開発してたら自然と100%になる気はするなぁ。
100%にする必要はないと言ったけど、100%だったらやっぱり気持ちいいな。
だからTDDは気持ちいい。
うむ、なんだかきれいにまとまった気がする。(ほんとか?)
参考
コード品質を追求する: カバレッジ・レポートに騙されないために
tags:rcov テスト | Permalink
2008-03-05
2008-03-04
rcovでRSpecのテストカバレッジも出すことができる。
ぐーぐる先生の力を借りて過去の歴史を紐解くと先人たちの苦労の跡が忍ばれるのだが、そのおかげか今はRakeのコマンド一発で連携が可能。
rake spec:rcov
すばらしい。
spec/rcov.opts
rake spec:rcovした時にrcovに与えるオプションはspec.optsで指定できる。
デフォルトの内容は以下。
--exclude "spec/*,gems/*"
--rails
他人の作ったライブラリなどカバレッジテストの対象外にしたいものは–excludeに追加するとよろしい。
近頃のこと
コカ・コーラのカナダドライ ジンジャーエール エクストラが辛くてうまい。
でもすぐ消えそうな予感もする。
tags:Rails rcov rspec テスト | Permalink
2008-03-04
2008-01-26
つくるぶガイドブログ: Rails + rcov でテストカバレッジを調べるを見てrcovを試してみたら面白かった。
前半コードを交えていろいろ書いてあるけど、普段からテストを普通に書いてるなら「rcov でテストカバレッジを調べる」の節から読んだらいいと思う。
以下のコマンドでrcovをgemからインストールして
sudo gem install rcov
以下のコマンドで実行。
rcov -x /usr/local/lib/ruby --rails test/**/*_test.rb
「-x /usr/local/lib/ruby」で自分が作ったのではないgem等のテストを無視(パス指定が大雑把かもしれん)、「–rails」でRailsの余計なファイルを無視してくれるということだ。
これでさくっとテストのカバレッジを示したHTMLが出来上がる。
実に簡単で、見て面白い。
アプリを作ってるときにテスト書くのをサボると後でテストを書くというのはけっこうモチベーション的にしんどいものがあるが、これを使いながらだったら書けそうだ。
ちなみにカバレッジによってテストされてないコード箇所は分かるが、適切なテストが書かれているかが保証されるわけではないし、そもそも必要なコードが書かれているかということも教えてくれないので過信は禁物。
カバレッジが100%でもバグはあり得る。
とはいえ、テストの品質と作成効率を上げるのにかなり役立つツールであることは間違いない。
tags:Rails rcov テスト | Permalink
2008-01-26