我使用Ruby3.2.2和Rails7.0.5。
我正在编写一个单元测试的一些代码,同时模仿/stubbing一个使用各种类方法的实用类。
它大致看起来像这样:
class MyUtilityClass
def self.foo
# Does something...
end
def self.bar
# Does something else...
end
end
class MyTestTarget
def run_foo
MyUtilityClass.foo
end
end
字符串
我想测试一下,当我调用run_foo
时,它会调用foo
,但不会调用MyUtilityClass
中的bar
。因此,作为测试的一部分,我需要存根foo
和bar
。
我知道如何像这样存根方法:
test 'calls foo' do
mock_foo = Minitest::Mock.new
mock_foo.expect :call, nil, []
MyUtilityClass.stub :foo, mock_foo do
t = MyTestTarget()
t.run_foo
end
mock_foo.verify
end
型
测试bar()
是否在此测试用例中被未调用的最优雅/最佳实践方法是什么?
1条答案
按热度按时间jrcvhitl1#
警告在最后。
所以,丑陋的回答你的实际问题,我相信
Minitest::Mock
的唯一方法是为你的:bar
创建一个mock,然后Assert.verify
确实引发了MockExpectationError
。...但是对于你的基本问题,更好的答案是,笨拙的API和内置mocking中缺乏功能是为什么像
mocha
这样的gem存在的原因,我强烈建议即使只是为了这个用例也值得切换:字符串
警告
希望你知道测试那些还没有被称为的东西是多么的变化无常。例如,如果有人后来在
foo
中添加了对bar
的调用,那么因为你在测试中模拟了foo
,那么bar
仍然不会被调用(在你的测试中),即使它在你的实际代码中被调用。