使用flexmock进行单元测试不会像预期的那样失败

时间:2013-03-06 15:59:01

标签: ruby unit-testing mocking

我正在尝试使用 flexmock test / unit 为我的单元测试创​​建模拟对象。这是我的课程:

class Cave
  def hunt
    # not yet implemented
  end
end

这是我的单元测试(请注意,此方法只是测试用例中的众多方法之一):

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

此测试应验证hunt方法是否至少一次将turn消息发送到分配给cave的{​​{1}}属性的对象。

如果我正确理解文档, flexmock 与单元测试框架联系在一起,并自动验证测试中定义的期望。因此,我预计上述测试会失败,因为方法hunter尚未发送hunt。但是,测试成功了。

我错过了什么吗?

更新:我已经设置了一个只包含一个最小测试的新文件,以查看flex mock是否可以按预期工作。以下测试产生预期结果,即失败:

turn

1 个答案:

答案 0 :(得分: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可以正常运行。