- Mock像装饰对象一样很容易使用
- 使用Mock可以很容易地模拟缓存抛出的异常
- 通过使用Mock,我们能验证装饰和被装饰对象之间的正确交互――即IgnoreExceptionsCacheManagerDecorator 的get(String, Object)方法调用被装饰对象的get(String, Object)方法。
实际上,当两个或更多对象之间的交互和这种交互的最终结果一样重要时,测试装饰是Mock测试许多应用中的一种。Mock的用法必须逐一确认(如测试Adapter模式的特定实现时)。装饰仅是安全引入Mock的一种特殊情况。
结束语
独立代码测试是一项具有挑战性的工作。通常,非平凡代码需要依赖一些协作软件,而这些协作软件是无法在测试中轻易或快速建立的。开发人员,甚至是最积极的开发人员,经过花费大量时间编写,维护和运行测试后都会失去信心。为了避免测试的减少,Mock对象提供了一种机制,通过模拟那些真实世界中的难以使用的和开销昂贵的依赖关系来进行完全独立的代码测试。虽然Mock能简化单元测试的创建,但它们不能代替功能测试和集成测试。Mock需要谨慎使用;滥用Mock会带来诸多问题,比如隐藏的集成问题、混乱、代码测试的重复、不必要的代码和测试的脆弱性。