ユーザ用ツール

サイト用ツール


rspec

文書の過去の版を表示しています。


RSpec

RSpec は Ruby 用のユニットテストフレームワーク。テスト(ビヘイビア)駆動開発を行うためのツール。自然と英語のような記述と仕様書を記述するようなコメントを書く事ができる。

インストール

$ gem install rspec

実行

RSpec 1

$ spec -c -fs ディレクトリorファイル

RSpec 2

$ rspec -c -fs ディレクトリorファイル

cオプションは色付け、fsオプションは仕様書風味の結果出力、実装が上手くいっているものが列挙されるので見てて楽しい。

書き方

hoge.rb

class Hello
  def initiliaze(msg = nil) 
    @message = msg | "world"
  end
 
  def greet
    "Hello @message"
  end
end

hoge_spec.rb

describe Hoge ,"を引数ナシでnewしたとき" do
  before do
    @hoge = Hoge.new
  end  
 
  it "greetすると Hello world が取得される" do  
    @hoge.greet.should == "Hello world"
  end
end

describeはネスト可能、特にRSpec On Railsはネスト前提

# 最も外側にテスト対象のクラスを指定
describe Hoge do 
 
  # 前提条件を記述
  describe "を引数ナシでnewしたとき" do
 
    # beforeで前提条件を作成する
    before do
      @hoge = Hoge.new
    end  
 
    # 前提条件を満たす時の想定される動作
    it "greetすると Hello world が取得される" do   
      @hoge.greet.should == "Hello world"
    end
    it "itemsプロパティは空" do
      @hoge.items.should be_empty
    end
  end
 
  describe "・・・・のとき、" do
    # 省略
  end
end

「テスト対象.should (マッチャ) 予想される結果」と書くのが基本。否定のときは「テスト対象.should_not (マッチャ) 予想されない結果」

マッチャ

==
===
=~
<
>
>=
<=
eql
equal
be_nil
be_true
be_false
be_close(expected, delta) 浮動小数点などの誤差がありそうな値ではdelta以内の誤差ならOK

booleanを返す xxx? メソッドは全部 be_xxx でマッチャとして呼べる

be_empty
be_kind_of Object

booleanを返す has_xxx? という名前のメソッドは全部 have_xxx でマッチャとして呼べる。ただしRubyはhas_xxxというメソッドが少ないのであまり使わないかも。

コレクションの数を検査するマッチャ、sizeまたはlengthメソッドを持っているオブジェクトに対して使用可能

have(n).items
have_at_least(n).items
have_at_most(n).items

正規表現

"abcd-12345".should match("/[a-z]{4}-[0-9]{5}/")

例外

lambda{ raise "hoge" }.should raise_error(RuntimeError, /^hoge$/)

状態の変化

# 何かする前と後で値が変わっている事
lambda{ 何か処理 }.should change(レシーバ, メッセージ)
# 前と後の値の差
lambda{ 何か処理 }.should change(レシーバ, メッセージ).by(1)  
# 前と後で取得される値がhogeからfugaになった
lambda{ 何か処理 }.should change(レシーバ, メッセージ).from(hoge).to(fuga)  
# changeの引数はblockも可
a = 1
lambda{ a = a.succ }.should { a }.from(1).to(2)

その他、ブロックの中の条件を満たす事

(1+1).should satisfy { |n| n > 1 } 
rspec.1285604655.txt.gz · 最終更新: 2011/04/21 14:53 (外部編集)