Mockito - 对由 mock 对象方法返回的对象的方法进行存根
假设我有一个模拟对象,我不想存根它的任何方法,但我想存根它返回的对象的方法。例如
when(mockObject.method1()).thenReturn(returnValue)
是通常的做法,但我正在寻找,
when(mockObject.method1().method2()).thenReturn(returnValue)
这可能吗?如果我这样做,我会得到一个NullPointerException。目前,我有存根第一个方法返回一个模拟对象,然后使用返回的模拟对象,存根第二个方法。但是,这些临时模拟对象对我来说是无用的,并且在将许多方法链接在一起之后,这会导致许多无用的模拟对象。
编辑:实际上,链接可能有效,但我的对象导致了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()则返回一个关系自动索引器。两个返回值都模拟如下:
nodeAutoIndexer = (AutoIndexer<Node>) mock(AutoIndexer.class);
relAutoIndexer = mock(RelationshipAutoIndexer.class);
那么是什么导致了这个问题呢?