我正在尝试使用 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
答案 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可以正常运行。