1

配列のソートがラムダ式を期待するようにモックするにはどうすればよいですか?

これは私の問題のささいな例です:

# initializing the data
l = lambda { |a,b| a <=> b }
array = [ 1, 2, 3, 4, 5 ]
sorted_array = [ 2, 3, 8, 9, 1]

# I expect that sort will be called using the lambda as a parameter
array.expects(:sort).with( l ).returns( sorted_array )

# perform the sort using the lambda expression
temp = array.sort{|a,b| l.call(a,b) }

さて、最初はこれがうまくいくと思っていました。ただし、次のエラーが発生しました。

- expected exactly once, not yet invoked: [ 1, 2, 3, 4, 5 ].sort(#<Proc:0xb665eb48>)

lがパラメータとしてlに渡されないため、これは機能しないことに気付きました。しかし、このコードが達成しようとしていることを行う別の方法はありますか?

注:上記の方法を理解せずに、問題を解決する方法を理解しました。他の誰かが同様の問題を抱えている場合に備えて、これは開いたままにしておきます。

乾杯、ジョセフ

4

1 に答える 1

1

ブロックを使用したメソッドのモックは、非常に混乱する可能性があります。鍵の 1 つは、テストする動作を明確にすることです。サンプル コードからは、何をテストしたいのか正確にはわかりません。ただし、Mocha::Expectation#yields (またはMocha::Expectation#multiple_yields ) のドキュメントが役立つ場合があります。

于 2010-12-02T11:15:28.613 に答える