内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
•
sastruts
rspec
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== RSpec ====== RSpec は [[Ruby]] 用のユニットテストフレームワーク。テスト(ビヘイビア)駆動開発を行うためのツール。テストケースをオブジェクトの仕様として記述することに重点を置いている。 ===== インストール ===== $ gem install rspec ===== 実行 ===== RSpec 1 $ spec -c -fs ディレクトリorファイル RSpec 2 でコマンドが変わった $ rspec -c -fs ディレクトリorファイル cオプションは色付け、fsオプションは仕様書風味の結果出力、実装が上手くいっているものが列挙されるので見てて楽しい。 $ rspec -l 83 とすると83行目を含むブロックだけが実行される。 ==== vimから呼び出せるようにする ==== rspec.vimというファイルを作成して、~/.vim/plugin に設置 <code vim> function RunRspec () :!rspec -cfs % endfunction function RunRspecLine () exe '!rspec -cfs -l ' . line('.') . ' %' endfunction au BufRead,BufNewFile *_spec.rb :command! Rspec :call RunRspec() au BufRead,BufNewFile *_spec.rb :command! Rspecl :call RunRspecLine() </code> :Rspecで今開いているspecファイルを実行できる。Rspeclで今カーソルがある行を含むブロックのみを実行する。 ===== 書き方 ===== hoge.rb <code ruby> class Hello def initiliaze(msg = nil) @message = msg | "world" end def greet "Hello @message" end end </code> hoge_spec.rb <code ruby> describe Hoge ,"を引数ナシでnewしたとき" do before do @hoge = Hoge.new end it "greetすると Hello world が取得される" do @hoge.greet.should == "Hello world" end end </code> describeはネスト可能、特にRSpec On Railsはネスト前提 <code ruby> # 最も外側にテスト対象のクラスを指定 describe Hoge do # 前提条件を記述 describe "を引数ナシでnewしたとき" do # before(:all)は、このdescribe内で一度だけ実行される before(:all) do @hoge = Hoge.new end # beforeで前提条件を作成する。beforeは各 it ... の前に実行される 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 </code> 「テスト対象.should (マッチャ) 予想される結果」と書くのが基本。否定のときは「テスト対象.should_not (マッチャ) 予想されない結果」 ===== マッチャ ===== <code> == === =~ < > >= <= eql equal be_nil be_true be_false be_close(expected, delta) 浮動小数点などの誤差がありそうな値ではdelta以内の誤差ならOK </code> booleanを返す xxx? メソッドは全部 be_xxx でマッチャとして呼べる <code ruby> be_empty be_kind_of Object </code> booleanを返す has_xxx? という名前のメソッドは全部 have_xxx でマッチャとして呼べる。ただしRubyはhas_xxxというメソッドが少ないのであまり使わないかも。 コレクションの数を検査するマッチャ、sizeまたはlengthメソッドを持っているオブジェクトに対して使用可能 <code ruby> have(n).items have_at_least(n).items have_at_most(n).items </code> 正規表現 "abcd-12345".should match("/[a-z]{4}-[0-9]{5}/") 例外 lambda{ raise "hoge" }.should raise_error(RuntimeError, /^hoge$/) 状態の変化 <code ruby> # 何かする前と後で値が変わっている事 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) </code> その他、ブロックの中の条件を満たす事 (1+1).should satisfy { |n| n > 1 }
rspec.txt
· 最終更新: 2011/05/22 08:57 by
nullpon
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ