提交修改之前的测试组合
在将本地的代码修改提交到代码控制存储库之前,为每个开发人员执行一次快速运行测试组合可以明显加快开发速度。只要测试能保证本地改变不会给代码基础带来错误,Mock对象就可以用来构建这种测试组合。一个典型的例子是,用HttpServletRequest、HttpServletResponse和HttpSession mock对象对Servlet进行独立测试,这比建立真正的应用程序服务器要更快速、更方便。
只要牢记这些测试可能会脆弱,我们就可以在测试套件中使用Mock,且有些时候(例如,在连续的集成创建过程中),我们也需要进行集成和功能测试。
对尚未编写的组件进行临时的集成测试
Mock对于各复杂组件在将来进行集成是非常有用的。例如,某个小组在等待另一个小组完成其组件时,就可以使用Mock测试,这是很有意义的。为了最小化集成中的问题,第二个小组可以为第一个小组构建并提供一个Mock对象。第二个小组完成了他们的工作,两个小组的组件集成测试就开始了,希望Mock测试使他们为实现系统预期行为,工作更密切。
到这一阶段,Mock已经实现了既定目标,并且应该将它移除(因为它存在潜在缺陷,甚至将来的测试还需要使用也是如此)。
装饰设计模式的测试实现
在前面的例子中,只要数据被正确存储,EmployeeBO怎样把员工信息存储到数据库中是无关紧要的。在装饰(decorator)设计模式中,它们与装饰对象之间的正确交互与交互的最终结果同样重要。考虑图3中所描述的简单例子。
图 3.缓存管理系统的类图
图 3演示了一个缓存管理系统,负责把经常使用的对象存储在缓存中,以提高系统的性能。这个缓存管理系统由一个接口(CacheManager)和两个实现(DistributedCacheManager和EmbeddedCacheManager)组成,这两个实现分别用于Web应用程序和富客户端应用程序。