トップ «前の日記(2014/08/16 (土) ) 最新 次の日記(2014/08/18 (月) )» 編集 RSS feed

HsbtDiary


2014/08/17 (日) [長年日記]

[ruby] rubyspec is 何

CRuby(MRI Ruby とか Ruby とか呼び名に議論はあるだろうけど、jruby, rubinius と区別するためにこう書く)では、ランタイムをぶっ壊してないかということを確認するためのテストスイートを 3 つ用意している. RubyCI を見ればわかるのだけど、それらは

  • make test
  • make test-all
  • rubyspec

の3つのことを指している。なお、test は ruby 本体のテスト、test-all は標準添付ライブラリのテストスイートである。今日は rubyspec について解説しようと思う。

rubyspec とはもともとは ruby の仕様そのものを書こうというプロジェクトで(色々あれこれあって、なぜ今の形になったかをここに書くには余白が足りなすぎるので省略する、ヒントは[ruby-dev:46350])、今は nurse/rubyspec というリポジトリで主に成瀬さんと中田さんがテストケース(rspec 的には examples)を開発している。

この rubyspec は test, test-all よりもだいぶユーザーサイドから見た CRuby の振る舞いを記述しているので、CRuby を開発している人以外にとってはかなり読みやすいと思う。実行方法は色々あるけど、ruby のリポジトリに用意されている Makefile を使うのが一番楽.

$ make update-rubyspec
$ make test-rubyspec

ただ、rubyspec でテストが落ちたから CRuby の動きはおかしいと言われても、どちらが真であるかは、ケースバイケースであることが多いので、まずは redmineに投げてほしい。昨日も 2.2 のテストケースに合わせて変更した rubyspec が 2.1 以下の ruby でぶっ壊れていたのでこんな感じで直したりしていた。

rubyspec は mspec という rspec のようでちょっとだけ rspec で実は別物を使っているけど、だいたい同じなので気にする必要はない。

現状の振る舞いを表現したテストコードというものはあればあるだけ良いので、Ruby という言語そのもののテストに興味のある人は rubyspec に examples の追加の pull request を送ると CRuby コミッタが何かをやらかす確率が減って色々はかどります。