【发布时间】:2013-03-06 15:59:00
【问题描述】:
我正在尝试使用 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 的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
【问题讨论】:
标签: ruby unit-testing mocking