Mock
在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
如上图,为了测试类A,我们需要Mock B类和C类(用虚拟对象来代替)
Mock适用
适用:
真实对象的行为具有不确定性。
真实对象难以创建。
真实对象的行为难以模拟(例如网络错误)。
真实对象运行效率很低。
真实对象有或者是UI。
测试需要得到某个对象列表,但是真实对象必须在某种环境下才能提供。
真实对象还没实现
Stub:
当这种依赖难以实现或者不稳定的时候可以考虑使用Stub策略,例如,需要测试的系统,可能需要访问数据库,依赖于运行环境(安全性,存储,Web Service),或者需要访问远程文件系统,访问远程协议(HTTP,SOAP)等。
(有兴趣可详细了解Mock与Stub区别)
Mock优点
提前创建测试,TDD(测试驱动开发)
团队可以并行工作
你可以创建一个验证或者演示程序
为无法访问的资源编写测试
Mock 可以交给用户
隔离系统
Mock工具
主流mock工具:
JMockit
EasyMock
Mockito
PowerMock
目前使用Mockito
可读性强,应用广泛
不适用final、static、private的对象,熟练掌握后可结合别的工具使用,如PowerMock
Mockito使用
1.创建工程,或导入已有工程,按步骤引用Junit和Mockito
2.点击Sync Now将修改同步
3.AddCalc类
4.AddCalled类
5.在待测代码空白处右击,选择Go To -> Test
6.点击Create New Test…
7.创建测试用例
8.选择测试用例保存路径
9.自动生成测试用例
10.修改测试用例
a.创建mock对象;
b.将mock与待测试对象连接;
c.设置预期返回值;
d.设计并执行测试用例;
e.验证测试结果,如调用顺序、返回值等。
11.测试结果