在单元测试期间使用完全模拟对象而不是使用存根时?

时间:2009-08-13 12:11:22

标签: unit-testing testing

根据我的经验,使用模拟对象可以实现的任何事情都可以使用存根来实现。是否存在无法使用存根且模拟对象运行良好的情况。

3 个答案:

答案 0 :(得分:4)

模拟通常包括检查方法是否已被调用的功能,而存根只返回存根数据。有关详细信息,请参阅differences between faking, mocking, and stubbing上的问题。

答案 1 :(得分:2)

Martin Fowler对他bliki

的差异进行了很好的描述

答案 2 :(得分:1)

Stubs是测试中实际协作者的替身/双重对象,并为某些请求提供固定答案。短裤通常是手工制作的。这意味着如果你虔诚地遵循这种方法,你最终可能会维护(繁琐?)很多虚假物品。

另一方面,模拟通常是动态的 - 您不保留这些测试双打的来源。相反,您使用模拟框架,该框架在运行时实现特定接口的模拟实现。模拟允许你指定期望(这些方法应该在这个序列中调用,使用这些参数,当它们是,返回这些值)和验证它们在测试结束。

简短回答谨慎使用存根来克服轻微障碍,因为您对协作者的互动不感兴趣但只是希望将其从方式的测试。 使用模拟进行基于交互的测试 - 您对SUT和模拟协作者的互动方式感兴趣