Mocktio 指南
所属分类 unit-test
浏览量 582
Mockito 是一个模拟测试框架 , 用于模拟 接口 类 对象的行为
Tasty mocking framework for unit tests in Java
https://site.mockito.org/
https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html
https://javadoc.io/doc/org.mockito/mockito-core/1.10.19/org/mockito/Mockito.html
LinkedList mockedList = Mockito.mock(LinkedList.class);
// stubbing 打桩
Mockito.when(mockedList.get(0)).thenReturn("first");
Mockito.when(mockedList.get(1)).thenThrow(new RuntimeException());
org.mockito.Mockito 的 mock 方法 模拟类和接口
mock方法 默认返回空数据 对象类型为 null
int 0
Integer null
boolean false
@Mock 注解 和 mock 方法
mock对象初始化 mock对象依赖注入
MockitoAnnotations.initMocks
可使用 @RunWith(MockitoJUnitRunner.class) 完成 初始化
mockito 实例
参数匹配
精确匹配,可以用 eq
Mockito.anyInt() 匹配所有类型为 int 的参数
spy 和 @Spy 注解
spy 和 mock 的区别
spy 的参数是对象 ,mock 的参数是 class
未打桩前 spy 会调用真实方法 ,mock不会调用实际方法
@Spy 如果修饰的变量是 null,会自动调用类的无参构造函数来初始化
mockito 会将 @Mock @Spy 修饰的对象自动注入到 @InjectMocks 修饰的对象中
按照以下顺序尝试注入
构造函数注入
设值函数注入(set函数)
属性注入
使用 thenReturn 设置方法返回值
thenReturn 指定特定函数和参数调用的返回值
thenReturn 可指定多个返回值 ,调用时依次返回
调用次数超出时,返回最后一个返回值
thenThrow 让方法抛异常
指定多个异常时 调用时依次抛异常
调用次数超出时,抛出最后一个异常
使用 then thenAnswer 自定义方法处理逻辑
参数是实现 Answer 接口的对象,在该对象中可以获取调用参数,自定义返回值
doReturn 设置方法的返回值
doReturn 与 thenReturn 相同,但使用方式不同
MockitoAnnotations.initMocks(this);
Random random = mock(Random.class);
doReturn(1).when(random).nextInt();
使用 doThrow 让方法抛出异常
方法返回值是为 void,不能用 when .. thenThrow
doNothing 让 void 函数什么都不做
MockitoJUnitRunner
使用 reset 方法,重置之前自定义的返回值和异常
使用 thenCallRealMethod 调用 spy 对象的真实方法
使用 verify 校验是否发生过某些操作
配合 time 方法,可以校验某些操作发生的次数
mockingDetails 方法返回 MockingDetails 对象
isMock isSpy 方法
PowerMock mock 静态方法
PowerMockRunner
Mockito 默认不支持静态方法
PowerMock 基于Mockito, 是一个增强库,支持 静态方法 mock
powermock 静态方法mock
PowerMock is a framework that extends other mock libraries such as EasyMock with more powerful capabilities.
PowerMock uses a custom classloader and bytecode manipulation to enable mocking of static methods, constructors, final classes and methods, private methods, removal of static initializers and more.
上一篇
下一篇
Spring AOP @Aspect
powermock 静态方法mock
mockito 实例
Mockito mock 和 spy 区别
mock 与 字节码生成工具
spring web 注解