mockito平时大家都要使用过,例如如下一个简单的示例;
此示例中,使用spy了一个类,然后对于这个类的getName方法,指定了返回值“1111”。后续代码的实际使用中,getName返回值就别替换成了“11111”;
在解析原理的过程中,我对于上述的代码,简单划分了几个阶段,方便大家理解
1. createMock阶段
createMock阶段,主要是通过bytebuddy创建一个目标类的子类,并且对于子类设置拦截器。返回子类的mock实例对象
2. mock阶段
mock阶段,主要是在当前线程开启一个mock过程,然后对于mock过程设置一个返回值,同时返回值对应的还有方法。
3. 调用阶段
调用阶段,根据当前调用的方法,使用createMock阶段的拦截器,找到mock阶段的返回值
下面是具体的每个阶段的执行链,方便后续大家继续跟踪源代码
createMock阶段
mock的过程,实际上是通过使用bytebuddy创建了一个目标类的子类,并且拦截监听所有的方法到对应的拦截器MockMethodInterceptor
mock阶段,when
Mock阶段thenReturn
调用阶段
核心代码:org.mockito.internal.creation.bytebuddy.SubclassBytecodeGenerator#mockClass