0

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送信することを確認することになっています。turncavehunter

ドキュメントを正しく理解していれば、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
4

1 に答える 1

0

設定に問題があると思います!

ドキュメントとあなたの例に従って、次の出力が得られます。

ruby test_foo.rb 
Run options: 

# Running tests:

[1/1] TestFoo#test_foo = 0.00 s
  1) Failure:
test_foo(TestFoo) [/Users/paule/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/flexmock-1.3.1/lib/flexmock/test_unit_integration.rb:53]:
in mock 'unknown': Method 'bar(*args)' called incorrect number of times
1 matching call expected
0 matching calls found
No messages have been received


Finished tests in 0.011163s, 89.5817 tests/s, 0.0000 assertions/s.
1 tests, 0 assertions, 1 failures, 0 errors, 0 skips

ruby -v: ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.1]

これは、ruby 2.0.0p0 を使用してすべてが正常に動作することを示しています。

于 2013-03-08T13:28:17.390 に答える