当使用真实对象不可行/不必要时,我会使用模拟对象。例如,假设您需要调用一些远程API,比如通过邮政编码查找地址。您可能希望模拟该对象,以便在每次运行测试时不会实际进行对其的调用。还有其他原因,比如提高速度,在需要精确响应的数据发生更改的情况下请求数据,或者可能尚不存在。它允许您在隔离中测试事物,因为您可以确定当您在此模拟对象上调用这些方法时,您将得到这个结果,而且对于此测试来说,实际运行代码并不重要。如果您使用固定装置,则会有一个真实的对象,并且将调用它们的方法等,并运行它们的代码,除非当然您截断了这些方法,这是另一个问题。希望这能有所帮助。关于模拟和存根,有一个很好的peepcode(http://peepcode.com/products/rspec-mocks-and-models),也许可以看看。