test / unitでflexmockを使用して、ユニットテスト用のモックオブジェクトを作成しようとしています。これは私のテスト中のクラスです:
class Cave
def hunt
# not yet implemented
end
end
これは私の単体テストです(このメソッドはテストケースの多くのメソッドの1つにすぎないことに注意してください)。
require 'test/unit'
require 'flexmock/test_unit'
require 'cave'
def test_play
hunter = flexmock()
cave = Cave.new
cave.hunter = hunter
hunter.should_receive(:turn).with(FlexMock.any).at_least.once
cave.hunt
end
このテストは、メソッドが's属性に割り当てられたオブジェクトにメッセージを少なくとも1回hunt
送信することを確認することになっています。turn
cave
hunter
ドキュメントを正しく理解していれば、flexmockは単体テストフレームワークと連携し、テストで定義された期待値を自動的に検証します。したがって、メソッドhunt
がまだ送信されていないため、上記のテストは失敗すると予想しましたturn
。ただし、テストは成功します。
私は何かが足りないのですか?
更新:フレックスモックが期待どおりに機能するかどうかを確認するための最小限のテストを1つだけ含む新しいファイルを設定しました。次のテストでは、期待どおりの結果が得られます。つまり、失敗します。
require 'test/unit'
require 'flexmock/test_unit'
class TestFoo < Test::Unit::TestCase
def test_foo
m=flexmock()
m.should_receive(:bar).and_return(17).once
end
end