Допустим, у меня есть фиктивный объект, и я не хочу заглушать ни один из его методов, но я хочу заглушить метод объекта, который он возвращает. Например,
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);
Итак, что может быть причиной проблемы?