Mockito - Заглушка метода объекта, который был возвращен методом фиктивного объекта

Допустим, у меня есть фиктивный объект, и я не хочу заглушать какой-либо из его методов, но я хочу заглушить метод возвращаемого объекта. Например,

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);

Так что же может быть причиной проблемы?

12
задан gsingh2011 29 October 2011 в 06:51
поделиться