假对象与模拟对象

时间:2015-12-15 11:47:15

标签: unit-testing tdd

在TDD中有两个概念:虚假对象和模拟对象。如果要测试的类与其他类或对象或数据库进行交互,则使用这两个概念...

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

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

但我仍然对两者之间的区别感到困惑: 他们都创建了组件的实现,并为Fake实现了轻量级。但是,如果是假的话,“快捷方式”的“轻量级实施”是什么意思? Mock对象的工作方式和真实对象之间的区别是什么?

1 个答案:

答案 0 :(得分:1)

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

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