Rubyのテストフレームワークを使ってみようと思います。
今回使ってみるのは Unit と RSpec です。Unit は有名ですが、 RSpec は知る人ぞ知るって感じがしますね。
テスト対象コード
#! /usr/bin/ruby # encoding: utf-8 class Foo def foo "foo" end def bar "bar" end def same ["foo", "bar"] end end
ごく平凡なコードです。説明するまでもありません。
では、このソースコードに対してテストコードを書いていきます。
Unit で書いたテストコード
#! /usr/bin/ruby # encoding: utf-8 require 'test/unit' require 'foo' class TC_Foo < Test::Unit::TestCase def setup @obj = Foo.new end def test_foo assert_equal("foo", @obj.foo) end def test_bar assert_equal("bar", @obj.bar) end def test_same assert_equal(["foo", "bar"], @obj.same) end end
Test::Unit::TestCase を継承してコードを書いていきます。
setup メソッドが始めに呼ばれ、その後に他メソッドが順番に呼ばれていきます。
詳しい使い方はドキュメントを参照するのと分かりやすかったです。
RSpec で書いたテストコード
#! /usr/bin/ruby # encoding: utf-8 require 'foo' describe Foo do before do @foo = Foo.new end it '"foo"が返ってきませんでした' do @foo.foo.should == "foo" end it '"bar"が返ってきませんでした' do @foo.bar.should == "bar" end it '正しく配列が返ってきませんでした' do @foo.same.should == ["foo", "bar"] end end
こちらは特に継承とかしません。ただし、実行方法が Unit と異なります。
spec spec_code.rb
テスト構成は Unit と同じですが、チェック方法などが異なり、spec で書いたほうが分かりやすい気がします。ここらは好みの問題じゃないですかね。
ちなみに、TextMate で実行させたかったのですが、上手く実行できませんでした。
ここら辺は調査して、いつか使えるようになりたいですね。