Допустим, у меня есть фиктивный объект, и я не хочу заглушать какой-либо из его методов, но я хочу заглушить метод возвращаемого объекта. Например,
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 (), который возвращает RelationshipAutoIndexer. Оба возвращаемых значения имитируются следующим образом:
nodeAutoIndexer = (AutoIndexer<Node>) mock(AutoIndexer.class);
relAutoIndexer = mock(RelationshipAutoIndexer.class);
Так что же может быть причиной проблемы?