unit-testing - 假对象与模拟对象

标签 unit-testing tdd

在 TDD 中有两个概念:假对象和模拟对象。这两个概念用于您要测试的类与其他类或对象或数据库交互的情况......

我的问题是:两者有什么区别?我什么时候可以使用它们中的每一个?

编辑:
我找到了这个答案:
What's the difference between faking, mocking, and stubbing?

但是我仍然对两者之间的区别感到困惑:
他们都创建了组件的实现,并为 Fake 提供了轻量级的实现。但是,在假货的情况下,“快捷方式”的“轻量级实现”是什么意思?
模拟对象的工作方式与真实对象的工作方式有什么区别?

最佳答案

DataSet 的假实现例如,将简单地返回一组静态数据。模拟几乎是一个完整的实现,能够根据输入生成各种数据集。如果您正在模拟您的数据层,您将能够针对模拟执行您的命令对象,并且它足够强大,可以使用“有效”语句返回数据,或者使用无效语句抛出异常。所有这些都没有实际连接到数据库或文件。

至于 mock 和 real 之间的区别,通常在 mock 一个类时,你会创建一个工厂对象,默认情况下返回真实对象,但是当你编写测试时,你可以告诉它返回一个特定的 mock 类。模拟类要么实现与真实对象相同的接口(interface),要么使用模仿底层真实类的包装类,但允许对关键部分进行依赖注入(inject)以生成数据,而无需进行外部调用。

关于unit-testing - 假对象与模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34288425/

相关文章:

unit-testing - 使用最小起订量模拟虚拟只读属性

tdd - 你如何在持续集成中处理 TDD?

oop - 单元测试不同的类层次结构

design-patterns - 关于最佳编程实践主题的循证研究?

python - 如何使 setUpClass 中的 python 单元测试失败?

python - 我们如何确保 Mock.call_args_list 中的调用包含参数与调用 Mock 对象时处于相同状态的调用?

c# - 单元测试中的逻辑

unit-testing - 如何在团队中灌输 TDD 习惯

python - Python Eve Web 服务的单元测试用例

php - Codeigniter 单元测试模型