agiledox with rails

投稿者 nanki 2005-11-06 17:50:00 GMT

rails のwiki を眺めていたら、こんなページ(TDDinRails)を発見。(見つけるの遅い)

この中で、rails のrake に agiledox 風の機能を追加するという小技が紹介されている。 要は、テストクラスのメソッド名を説明的に書いて(test_should….)、テストを書くと同時にクラスの仕様のリストまで作成してしまおう、というやり方のようだ。

task :agiledox do
  tests = FileList['test/**/*_test.rb']
  tests.each do |file|
    m = %r".*/([^/].*)_test.rb".match(file)
    puts m[1]+" should:\n"
    test_definitions = File::readlines(file).select {|line| line =~ /.*def test.*/}
    test_definitions.each do |definition|
      m = %r"test_(should_)?(.*)".match(definition)
      puts " - "+m[2].gsub(/_/," ")
    end
    puts "\n"
  end
end

の様なコードをRakefile に追加することで、

$ rake agiledox
user_controller should:
 - store user in session on successful login
 - not store user in session on unsuccessful login
...

という使い方ができるようになる。 テストに失敗しても、メソッド名から何がどう失敗しているかがわかりやすいし、TODO 管理の様にも使える。

なるほど、これならテスト駆動開発が楽しいものになりそうだ、と心の中でわくわくした。

さらに、ruby ではメソッド名に日本語が使えるので、

def test_ログインに成功したらsessionにuserが保存される。
...
end

ともできる。

これは良さそうということで、早速後輩に勧めたら、テストコードが書きたくてしょうがなくなったようだ。 テスト駆動開発定着までの近道として参考になる。

参考

This entry was posted on 2005-11-06 17:50:00 GMT and カテゴリ , . You can follow any response to this entry through the Atom feed. or a trackback from your own site.

タグ , , , , ,


トラックバック

トラックバックリンク:
http://blog.netswitch.jp/trackbacks?article_id=23