栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Mockito when()调用如何工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mockito when()调用如何工作?

简短的答案是,在您的示例中,的结果mock.method()将是类型合适的空值;Mockito通过代理,方法拦截和类的共享实例使用间接方式,MockingProgress以确定对模拟方法的调用是用于存根还是重放现有的存根行为,而不是通过的返回值传递有关存根的信息。一种嘲笑的方法。

几分钟后,对微型代码进行了简短的分析。注意,这是一个非常粗糙的描述-这里有很多细节。我建议您自己检查github上的源代码。

首先,当您使用类的mock方法模拟一个类时Mockito,实际上是这样:

  1. Mockito.mock
    org.mockito.internal.MockitoCore
    默认的模拟设置作为参数传递给.mock。
  2. MockitoCore.mock代表
    org.mockito.internal.util.MockUtil.createMock
  3. MockUtil
    类使用
    ClassPathLoader
    类来获得的实例MockMaker用于创建模拟。默认情况下,使用
    CgLibMockMaker
    类。
  4. CgLibMockMaker使用从JMock借用的类,该类ClassImposterizer处理创建模拟。所使用的“魔术的Mockito”键片的MethodInterceptor用于创建模拟:所述的M
    ockitoMethodInterceptorFilter
    以及
    MockHandler
    实例,包括的实例的链MockHandlerImpl。方法拦截器将调用传递给
    MockHandlerImpl
    实例,该实例实现在对某个模拟调用某个方法时(例如,搜索是否已记录答案,确定该调用是否代表新的存根等)应应用的业务逻辑。默认状态是,如果尚未为正在调用的方法注册存根,则将返回类型合适的空值。
    现在,让我们看一下示例中的代码:
when(mock.method()).thenReturn(somevalue)

这是此代码执行的顺序:

mock.method()when(<result of step 1>)<result of step 2>.thenReturn

理解发生了什么的关键是当调用模拟方法上的方法时会发生什么:向方法拦截器传递有关方法调用的信息,并委托给它的

MockHandler
实例链,最终将实例委托给
MockHandlerImpl#handle
。在期间
MockHandlerImpl#handle
,模拟处理程序创建的实例
OngoingStubbingImpl
并将其传递给共享MockingProgress实例。

在when调用之后调用该方法时

method()
,它将委托给
MockitoCore.when
,后者将调用stub()同一类的方法。此方法从
MockingProgress
模拟
method()
调用写入的共享实例中解压缩正在进行的存根,然后将其返回。然后
thenReturn
OngoingStubbing
实例上调用方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569634.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号