一站式讲明白Mockito打桩测试常用的几个接口
文章目录
本文不求讲的全面,只求讲的实用,拿来就能用。另外本文没有涉及到异常相关的打桩,下次再续。
1. 几个术语:
真实对象:代码中定义的class,并使用new方法初始化的对象
mock对象:模拟真实对象的对象,采用Mockito初始化的对象
真实方法:class中定义的方法
mock方法:采用Mockito定义的方法,测试时用来替代真实方法
打桩:Stub,就是把所需要的测试数据塞到一个对象里,重点关注测试目标的方法,对于不易构造或者不易获取对象和方法都采用桩来代替,这个过程就叫打桩。Mockito的doXxx方法返回值就是Stubber类型。
2. Mock对象和Mock部分对象(partial-mock)
场景
Mock对象的场景是:测试过程中,对于某些不容易构造或者不容易获取的对象,就可以用一个虚拟的对象来创建以便测试。
Mock部分对象的场景:希望调用部分mock的方法,其余的方法调用真实的方法。
接口
// mock整个对象,对函数掉调用都使用mock的方法,除非显示的调用doCallRealMethod()
Mockito.mock(Class<T> classToMock, MockSettings mockSettings)
//mock部分对象,对函数的调用均执行真正的方法,除了使用doXxx或者thenXxx的部分。
Mockito.spy(Class<T> classToSpy)
实例
import org.mockito.Mockito;
// 默认就执行mock方法
JobManager jobManager = Mockito.mock(JobManager.class);
// 除了在测试用例中打桩mock的方法以外,其他都执行真实的方法
JobManager jobManager = Mockito.spy(JobManager.class);
3. 否真正执行方法,doXxx和thenXxx
场景
- doXxx的接口都是不会执行对象的真实方法,直接执行doXxx中的方法/值/异常。
- thenXxx的接口都是会先执行对象的真实方法,然后返回thenXxx中的处理逻辑/值/异常。
接口
Mockito.doReturn(Object toBeReturned)
Mockito.doAnswer(Answer answer)
Mockito.doThrow(Throwable... toBeThrown)
......
thenReturn(T var1)
thenAnswer(Answer<?> var1)
thenThrow(Throwable... var1)
......
实例
// doXxx公式:doXxx(返回值/方法).when(mock对象).对象的方法(入参的类型),
// doXxx如果没有逻辑也可以doNothing,例如:
Mockito.