测试驱动开发(TDD)这个概念想必大家都有所了解了,在以往内部逻辑开发完成进行单元测试,抑或是在协同作战、并行工作、跨部门、跨行业协作的过程中,可能都会发现一些测试无从下手,因为被测试模块需要和一些不容易构造、比较复杂的对象进行交互,没法完成整个业务流程的测试,当然可以通过临时的#if...#else来辅助,显然这个没法完成本质性的模拟测试,有没有相对好一些的方法呢?……我们可以创建模拟对象来模拟那些需要隔离出去的对象,从而把测试与测试边界以外的对象隔离开。这就是所谓的Mock 方法,先来看看怎么进行依赖的模拟。
目前基于测试的模拟有诸多组件,Easy Mock.NET、NMock等等。
1、 Easy Mock
手工编写自定义的 Mock 对象既耗时且容易错误。通过EasyMock我们可以动态构建 Mock 对象,它是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。
使用 EasyMock 进行单元测试的步骤:
1)使用 EasyMock 生成 Mock 对象
2)设定 Mock 对象的预期行为和输出
3)将 Mock 对象切换到 Replay 状态
4)调用 Mock 对象方法进行单元测试
5)对 Mock 对象的行为进行验证
Easy Mock使用简单示例:http://www.cnblogs.com/yuxiaorong/archive/2011/11/30/2268670.html
2、NMock
与Easy Mock实现上相差不多,
简介:http://blog.csdn.net/zhaogaohong/article/details/6073218
使用:http://www.cnblogs.com/anf/archive/2005/03/20/122342.aspx
扩展阅读:
Easy Mock
https://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/
NMock
http://www.cnblogs.com/netcobra/archive/2004/11/24/68199.html
http://www.cnblogs.com/netflu/archive/2007/01/18/623896.html
http://www.chrisbrandsma.com/2007/09/nmock-as-compared-to-rhinomocks.html