模拟和桩之间有什么区别?

1359

175
因为没有区别。尽管该文章备受社区喜爱,但它却不必要地给本来易于理解的词汇添加额外的含义,并使事情变得不必要地复杂,从而让一切变得混乱。Mock只是一个模拟,运行虚假业务逻辑而不是真实的业务逻辑。最后检查其行为是你的选择,但它仍然是一个mock。或者你想用其他任何称呼,但请把它统一起来,不要纠缠于细节,保持简单,这样人们才能容易地理解你的概念 - 此前提到的文章在这方面失败了。 - wst
28
文献中关于模拟对象、伪对象和桩对象的分类标准极不一致。该句话有多处引用,是我最喜欢的维基百科语录之一。 - JD.
29
Martin Fowler的那篇文章对于初学者来说真的很难理解。 - lmiguelvargasf
1
可能是What's the difference between faking, mocking, and stubbing?的重复问题。 - tvanfosson
显示剩余2条评论
42个回答

0

在测试中,存根(Stub)用于具有预期返回值的方法,你可以在测试中设置这些值。模拟对象(Mock)用于没有返回值的方法,你可以在Assert中验证它们是否被调用。


0

以下是我的理解...

  • 如果您在本地创建测试对象并将其提供给本地服务,则使用模拟对象。 这将为您在本地服务中实现的方法提供测试。 它用于验证行为。

  • 当您从真实服务提供商那里获取测试数据,尽管是从接口的测试版本获取测试版本的对象,您正在使用存根。 存根可以具有逻辑来接受某些输入并给出相应的输出,以帮助您执行状态验证...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接