《Java单元测试实战》——编写方法:Java编程技巧之单元测试用例编写流程(8) https://developer.aliyun.com/article/1232412?groupCode=java
2. 根据参数模拟方法
Mockito提供do-when语句和when-then语句模拟方法。
1) 模拟无参数方法
对于无参数的方法模拟:
2)模拟指定参数方法
对于指定参数的方法模拟:
3)模拟匹配参数方法
在模拟依赖方法时,需要自定义匹配参数值,可以使用Mockito参数匹配器的that方法。Mockito提供了booleanThat、intThat、longThat、doubleThat、argThat等方法来进行匹配值。
4) 模拟任意参数方法
在模拟依赖方法时,有时候并不关心传入参数的具体值,可以使用Mockito参数匹配器的any方法。Mockito提供了anyInt、anyLong、anyString、anyList、anySet、anyMap、any(Class clazz)等方法来表示任意值。
5)模拟可空参数方法
Mockito参数匹配器的any具体方法,并不能够匹配null对象。而Mockito提供一个nullable方法,可以匹配包含null对象的任意对象。此外,Mockito.any()方法也可以用来匹配可空参数。
6)拟必空参数方法
同样,如果要匹配null对象,可以使用isNull方法,或使用eq(null)。
7)模拟不同参数方法
Mockito支持按不同的参数分别模拟同一方法。
注意:如果一个参数满足多个模拟方法条件,会以最后一个模拟方法为准。
8)模拟可变参数方法
对于一些变长度参数方法,可以按实际参数个数进行模拟:
也可以用Mockito.any()模拟一个通用匹配方法:
注意:Mockito.any()并不等于Mockito.any(Class type),前者可以匹配null和类型T的可变参数,后者只能匹配T必填参数。
3.模拟其它特殊方法
1)模拟final方法
PowerMock提供对final方法的模拟,方法跟模拟普通方法一样。但是,需要把对应的模拟类添加到@PrepareForTest注解中。
2) 模拟私有方法
PowerMock提供提对私有方法的模拟,但是需要把私有方法所在的类放在@PrepareForTest注解中。
3)模拟构造方法
PowerMock提供PowerMockito.whenNew方法来模拟构造方法,但是需要把使用构造方法的类放在@PrepareForTest注解中。
4)模拟静态方法
PowerMock提供PowerMockito.mockStatic和PowerMockito.spy来模拟静态方法类,然后就可以模拟静态方法了。同样,需要把对应的模拟类添加到@PrepareForTest注解中。
注意:第一种方式不适用于PowerMockito.spy模拟的静态方法类。
《Java单元测试实战》——编写方法:Java编程技巧之单元测试用例编写流程(10) https://developer.aliyun.com/article/1232409?groupCode=java