加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Mockito – 存储由mock对象方法返回的对象的方法

发布时间:2020-12-14 05:15:19 所属栏目:Java 来源:网络整理
导读:假设我有一个模拟对象,我不想存根它的任何方法,但我想要存储一个返回的对象的方法.例如, when(mockObject.method1()).thenReturn(returnValue) 它是如何正常完成,但我正在寻找, when(mockObject.method1().method2()).thenReturn(returnValue) 那可能吗?如
假设我有一个模拟对象,我不想存根它的任何方法,但我想要存储一个返回的对象的方法.例如,
when(mockObject.method1()).thenReturn(returnValue)

它是如何正常完成,但我正在寻找,

when(mockObject.method1().method2()).thenReturn(returnValue)

那可能吗?如果我这样做,我会得到一个NullPointerException.目前我有第一个方法返回一个mock对象,然后使用返回的mock对象,存根第二个方法.然而,这些临时模拟对象对我来说是无用的,并且在链接许多方法之后,导致了许多无用的模拟对象.

编辑:实际上,链接可能有效,但我的对象正在导致NPE.这段代码(第一行)导致NPE:

when(graphDb.index().getNodeAutoIndexer()).thenReturn(nodeAutoIndexer);
when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);

但这段代码的作用是:

IndexManager indexManager = mock(IndexManager.class);
when(graphDb.index()).thenReturn(indexManager);
when(indexManager.getNodeAutoIndexer()).thenReturn(nodeAutoIndexer);
when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);

因此,getNodeAutoIndexer()返回一个AutoIndexer对象,因为getRelationshipAutoIndexer()返回一个RelationshipAutoIndexer,所以链接不起作用.两个返回值都被嘲笑如下:

nodeAutoIndexer = (AutoIndexer<Node>) mock(AutoIndexer.class);
relAutoIndexer = mock(RelationshipAutoIndexer.class);

那么可能导致这个问题呢?

解决方法

根本没有问题.

我们来看看这4行代码:

IndexManager indexManager = mock(IndexManager.class);
when(graphDb.index()).thenReturn(indexManager);
when(indexManager.getNodeAutoIndexer()).thenReturn(nodeAutoIndexer);
when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);

第一行创建一个模拟indexManager.

第二个告诉mock graphDb在调用索引方法时返回indexManager(在第一行创建的模拟).

第三个在调用getNodeAutoIndexer方法时,将模拟indexManager(在第一行创建)返回到nodeAutoIndexer.

最后一行调用graphDb.index(),它返回模拟indexManager(你告诉它在第二行),并询问这个indexManager(这是你在第一行创建的模拟),当它的getRelationshipAutoIndexer方法返回relAutoIndexer叫做.

最后一行的工作原理是因为你告诉mock graphDb调用它的索引方法时返回什么.如果你以前没有这样做,那么模拟graphDb.index()方法将返回null,你将有一个NPE.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读