モックオブジェクトがあり、そのメソッドをスタブしたくないが、返されるオブジェクトのメソッドをスタブしたいとします。例えば、
when(mockObject.method1()).thenReturn(returnValue)
それが通常行われている方法ですが、私は探しています、
when(mockObject.method1().method2()).thenReturn(returnValue)
それは可能ですか?そうすると、NullPointerExceptionが発生します。現在、モックオブジェクトを返す最初のメソッドをスタブし、次に返されたモックオブジェクトを使用して、2番目のメソッドをスタブします。ただし、これらの一時的なモックオブジェクトは私には役に立たず、多くのメソッドをチェーン化した後、多くの役に立たないモックオブジェクトが生成されます。
編集:実際には、チェーンが機能する可能性がありますが、私のオブジェクトが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);
したがって、チェーンは、AutoIndexerオブジェクトを返すgetNodeAutoIndexer()では機能しませんでしたが、RelationshipAutoIndexerを返すgetRelationshipAutoIndexer()では機能しませんでした。両方の戻り値は次のようにモックされます。
nodeAutoIndexer = (AutoIndexer<Node>) mock(AutoIndexer.class);
relAutoIndexer = mock(RelationshipAutoIndexer.class);
では、何が問題を引き起こしているのでしょうか?