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