unit/test(1ファイルの場合)
Rubyでテスト駆動開発するのはとても簡単です。test/unitをrequireして、TestCaseを継承したclassをファイルに作って実行するだけです(テストメソッドは多分"test_"で始まる必要がある)。test/unit.rbの方でテストの実行が記述してある(test/unit.rbの最後の行Test::Unit::Mini::autorun)のでユーザーはclassを実装するだけでokです。
また、RubyはPythonと同様に各組み込みclassから標準ライブラリに至るまで、すでにテストがあります。それを読むと仕様がおおよそわかります。
#!/usr/local/bin/ruby require 'test/unit' class TestString < Test::Unit::TestCase def initialize(*args) @cls = String super end def S(str) @cls.new(str) end def test_s_new assert_equal("RUBY", S("RUBY")) end def test_AREF #[] #インデックスは0から始まる assert_equal("F", S("FooBar")[0]) #後ろからn番目の要素を得るには[-n]を使う assert_equal("r", S("FooBar")[-1]) #未定義の要素はnilを返す assert_equal(nil, S("FooBar")[6]) #後ろからでも同じ assert_equal(nil, S("FooBar")[-7]) #[from, size]かな? assert_equal(S("Foo"), S("FooBar")[0, 3]) assert_equal(S("Bar"), S("FooBar")[3, 3]) assert_equal(S("Bar"), S("FooBar")[-3, 3]) #[length, size]だと空文字列 assert_equal(S(""), S("FooBar")[6, 2]) #後ろからだと空文字列にはならずnil。"FooBar"が'FooBar\0'だから? assert_equal(nil, S("FooBar")[-7, 2]) #それより大きいとnil assert_equal(nil, S("FooBar")[1000, 2]) assert_equal(nil, S("FooBar")[-1000, 2]) #[a .. b]: a <= x <= b assert_equal(S("Foo"), S("FooBar")[0..2]) #[a ... b]: a <= x < b assert_equal(S("FooB"), S("FooBar")[0...4]) end end
上のテストはruby/test/ruby/test_string.rbを見ながら(ゆるく)写したテストの一部です(コメントはぼくが勝手に書いただけです)。すでにあるテストを写経するのは、仕様の知る、テストの書き方を学べる、文法に慣れるなど、学習には最適かなと思います。