我注意到很多人都喜欢摩卡,而不是RSpec内置的嘲讽框架。有人可以解释一下Mocha或者其他替代方法在建立在模拟框架中的RSpec的优势吗?Mocha优于RSpec内置嘲讽框架的优势是什么?
回答
我真的很喜欢的一个特定功能是能够将一个类的所有实例都删除。很多时候,我像做使用RSpec以下嘲笑:
stub_car = mock(Car)
stub_car.stub!(:speed).and_return(100)
Car.stub!(:new).and_return(stub_car)
与摩卡变成:
Car.any_instance.stubs(:speed).returns(100)
我找到摩卡版本更清晰,更明确。
我一个人使用摩卡,因为我不使用rspec。我使用测试/单元,测试/单元没有内置的stubbing和mocking。
[Rspec-mocks](https://github.com/rspec/rspec-mocks)现在是一个可以在任何非Rspec项目中使用的独立项目。 – 2013-08-20 21:38:18
据我所知,Mocha支持双重喷射(又名部分模拟,它也支持rr),不确定RSpec是否也支持这个功能。另外,对于那些更喜欢在测试框架之间切换的人,Mocha是适用于测试/单元,Shoulda等的通用解决方案。使用RSpec模拟所有这些库将会是一个矫枉过正的问题。
[Rspec-mocks](https://github.com/rspec/rspec-mocks)现在是一个可以在任何非Rspec项目中使用的独立项目。 – 2013-08-20 21:40:59
红宝石嘲讽框架已经进化了很多,因为这个问题已经在2009年被要求所以这里是一个小2013比较:
预期
- 使用RSpec-嘲笑:
expect(user).to receive(:say_hello)
- 与摩卡:
user.expects(:say_hello).once
打桩对象
- 与Rspec的-嘲笑:
user = double(name: 'John Doe')
- 与摩卡:
user = stub(name: 'John Doe')
打桩任何
- 与Rspec的-嘲笑:
User.any_instance.stub(:name).and_return('John Doe')
- 与摩卡:
User.any_instance.stubs(:name).returns('John Doe')
他们提供相同的设施,都可以使用带或不带Rspec。
所以我会说选择一个在另一个是个人品味的问题(和他们的味道很相似)。
有一些具体的比较非常有用,+1 – 2014-08-05 21:50:00
- 1. rspec mocking与其他嘲讽框架有什么优缺点?
- 2. pathmunge优于grep的优势是什么?
- 3. Kafka优于RabbitMQ的优势是什么?
- 4. 关于嘲讽框架
- 5. 什么是“优秀”框架?
- 6. 嘲笑nUint的优势
- 7. 装载机优于Android中的Asynctask的优势是什么?
- 8. SMACK优于SE Linux的优势是什么?
- 9. WCF服务优于WebService 2.0的性能优势是什么?
- 10. MySQLi优于MySQL的优势
- 11. RSpec的 - 嘲讽类方法
- 12. 工厂模式的优势是什么?
- 13. 什么是Android的领先优势?
- 14. 什么是JavaCC的优势与ANTLR
- 15. C#4中DLR的优势是什么?
- 16. 链式异常的优势是什么
- 17. 什么是asp.net mvc的优势?
- 18. Silverlight中DLR的优势是什么?
- 19. ASP.NET Webforms的主要优势是什么?
- 20. 键值存储的优势是什么?
- 21. 使用ORM工具(框架)的优势?
- 22. reftype {}有什么优势?
- 23. 是否有任何可用于Spring AMQP的嘲讽框架
- 24. 为什么我会选择Moles作为我的嘲讽框架?
- 25. Promises优于CPS和Continuation Functor/Monad有什么优势?
- 26. 异步优于BeginXXX/EndXXX有什么优势?
- 27. 实体框架+优势数据库:UDF
- 28. rspec比test :: unit有什么主要优势?
- 29. 什么是ASO和BSO,使用这些的优势是什么
- 30. 关于SaaS优势
any_instance可能是*使用摩卡的原因。它非常强大,可以节省大量时间。 – 2009-09-13 06:18:17
您现在可以使用RSpec 2完成此操作:https://www.relishapp。com/rspec/rspec-mocks/docs/method-stubs/stub-on-any-instance-of-a-class – 2011-09-14 18:51:09
是的,这个答案已经过时。是否有可能“取消”它? – 2013-08-20 21:37:09