我注意到很多人更喜欢Mocha而不是RSpec内置的模拟框架。有人可以解释摩卡的优势,或任何替代方案,而不是RSpec内置的模拟框架吗?
答案 0 :(得分:39)
<强>期望强>
expect(user).to receive(:say_hello)
user.expects(:say_hello).once
对象进行存根
user = double(name: 'John Doe')
user = stub(name: 'John Doe')
存根任何事情
User.any_instance.stub(:name).and_return('John Doe')
User.any_instance.stubs(:name).returns('John Doe')
他们提供相同的设施,两者都可以使用或不使用Rspec 所以我会说选择一个是另一个是个人品味(它们的味道非常相似)。
答案 1 :(得分:31)
我真正喜欢的一个特定功能是能够存根所有类的实例。很多时候我使用RSpec模拟执行以下操作:
stub_car = mock(Car)
stub_car.stub!(:speed).and_return(100)
Car.stub!(:new).and_return(stub_car)
与Mocha成为:
Car.any_instance.stubs(:speed).returns(100)
我发现Mocha版本更清晰,更明确。
答案 2 :(得分:4)
据我所知,Mocha支持双注入(也称为部分模拟,rr也支持),不确定RSpec是否也支持此功能。
此外,对于那些喜欢在测试框架之间切换的人来说,Mocha是适用于Test / Unit,Shoulda等的通用解决方案。使用RSpec模拟所有这些库将是一种过度杀伤。
答案 3 :(得分:3)
我一个人使用摩卡,因为我不使用rspec。我使用test / unit,test / unit没有内置的stubing和mocking。