《Java单元测试实战》——编写方法:Java编程技巧之单元测试用例编写流程(5) https://developer.aliyun.com/article/1232415?groupCode=java
四、 模拟依赖对象
在编写单元测试用例时,需要模拟各种依赖对象——类成员、方法参数和方法返回值。
1. 直接构建对象
如果需要构建一个对象,最简单直接的方法就是——定义对象并赋值。
2.反序列化对象
如果对象字段或层级非常庞大,采用直接构建对象方法,可能会编写大量构建程序代码。这种情况,可以考虑反序列化对象,将会大大减少程序代码。由于JSON字符串可读性高,这里就以JSON为例,介绍反序列化对象。
反序列化模型对象:
反序列化集合对象:
反序列化映射对象:
建议:JSON文件内容不要格式化,以免占用更多的代码行数。
3.利用Mockito.mock方法
Mockito提供一个mock功能,用于拦截那些尚未实现或不期望被真实调用的方法,默认所有方法都已被模拟——方法为空并返回默认值(null或0),除非主动执行doCallRealMethod或thenCallRealMethod操作,才能够调用真实的方法。
利用Mockito.mock方法模拟依赖对象,主要用于以下几种情形:
•只使用类实例,不使用类属性;
•类属性太多,但使用其中少量属性(可以mock属性返回值);
•类是接口或虚基类,并不关心其具体实现类。
4.利用@Mock注解
@Mock注解跟Mockito.mock方法一样,可以用来模拟依赖对象,适用于普通类、接口和虚基类。@Mock注解需要配合@RunWith注解使用。
5. 利用Mockito.spy方法
Mockito.spy方法跟Mockito.mock方法功能相似,只是Mockito.spy方法默认所有方法都是真实方法,除非主动去模拟对应方法。
6. 利用@Spy注解
@Spy注解跟Mockito.spy方法一样,可以用来模拟依赖对象,适用于普通类、接口和虚基类。@Spy注解需要配合@RunWith注解使用。
注意:@Spy注解对象需要初始化。如果是虚基类或接口,可以用Mockito.mock方法实例化。
《Java单元测试实战》——编写方法:Java编程技巧之单元测试用例编写流程(7) https://developer.aliyun.com/article/1232413?groupCode=java