使用rspec,混淆了mock和stub对象之间的区别?

Bla*_*man 2 rspec ruby-on-rails

模拟和存根有什么区别,它们看起来和我很相似?

如果有人可以给出一个真实世界的例子,告诉他们什么时候使用哪个,或者它们是否可以互换但是有一个最好的做法,例如何时使用模拟或存根,那将会很好

apn*_*ing 7

这是大多数文章的参考,非常通用和清晰的解释:

http://martinfowler.com/articles/mocksArentStubs.html

简而言之:

存根提供了在测试期间进行的调用的固定答案,通常不会对测试中编程的任何内容做出任何响应.存根还可以记录有关呼叫的信息,例如记住它'发送'的消息的电子邮件网关存根,或者可能只记录它'发送'的消息.

模拟是预编程的对象,具有期望,形成了预期接收的调用的规范.