0

我正在尝试将flexmocktest/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'hunter属性的对象至少一次。

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

我错过了什么吗?

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

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 回答