Скажем, у меня есть макет объекта, и я не хочу заглушить его, но я хочу заглушить метод возвращаемого им объекта. Например,
when(mockObject.method1()).thenReturn(returnValue)
как обычно это делается, но я ищу,
when(mockObject.method1().method2()).thenReturn(returnValue)
Это возможно? Я получаю исключение NullPointerException, если я это сделаю. В настоящее время я закрыл первый метод, чтобы вернуть объект-макет, а затем используя этот возвращенный макет объекта, заглушите второй метод. Однако эти временные макетные объекты бесполезны для меня и после объединения многих методов вместе, что приводит к множеству бесполезных макетных объектов.
EDIT: На самом деле возможно, что цепочка работает, но мои объекты вызывают 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);
И что может быть причиной проблемы?