メルマガねた

ブロック先をモックにしてBehavior Verification.
ブロックだと無名のメソッドになるから、名前の「do」が重要じゃなくなる。

class StringToSortedIntArrayFilter  
  def run(message)
    yield(message.split(",").collect{ |node| node.to_i }.sort)
  end
end


describe StringToSortedIntArrayFilter do
  before do 
    @mock = mock("フィルターの先のモック")
    @filter = StringToSortedIntArrayFilter.new
  end
  
  it "コンマ区切りの文字列をソート済みの数値の配列に変換するフィルターの役割を果たすこと" do
    @mock.should_receive(:do).with([1,2,7,8])
    @filter.run("2,7,1,8") { |nodes| @mock.do(nodes) }
  end
end

Behavior Verification at XUnitPatterns.com