我试图了解 Mockito 的内部结构如何运作。到目前为止,代码对我来说很难理解,我正在寻找对 Mockito 基本工作原理的高级调查。
我编写了一些示例代码来展示我目前的理解:
class C {
String s;
public void getS() { return s; }
// ...
}
C cm = mock( C.class);
when( cm.method() ).thenReturn( "string value");
据我所知,“模拟”方法只看到 cm.getS() 的返回值。它如何知道方法的名称是什么(以便存根)?此外,它如何知道传递给该方法的参数?
mockito API 方法调用内部对象的方法:
// org.mockito.Mockito
public static <T> OngoingStubbing<T> when(T methodCall) {
return MOCKITO_CORE.when(methodCall);
}
我已经将方法调用跟踪到了几个不同的抽象以及类和对象中,但是代码是如此解耦,以至于很难理解这种方式。
// org.mockito.internal.MockitoCore
public <T> OngoingStubbing<T> when(T methodCall) {
mockingProgress.stubbingStarted();
return (OngoingStubbing) stub();
}
因此,如果有人了解内部结构或有讨论/博客文章的链接,请分享:)