Java – mock nested method calls using mockito

javajunitmethodsmockingmockito

I have got 4 classes lets says A, B, C, D each calling on methods from another one.

now I have mocked class A, and want to mock a method using mockito

A a = Mockito.mock(A.class);

and want to get "foo" on recursive method calls like

a.getB().getC().getD() should return "foo"

I tried

when(a.getB().getC().getD()).thenReturn("foo");

but got nullPointerException

then I tried

doReturn("foo").when(a.getB().getC().getD());

then I got org.mockito.exceptions.misusing.UnfinishedStubbingException:

I know I can create objects of B, C and D, or can even write something like

B b = mock(B.class) or A.setB(new B())

and so on.

But can't I do that in a single shot?
Any help would be appreciated.

Best Answer

Adding RETURNS_DEEP_STUBS did the trick:

A a = Mockito.mock(A.class, Mockito.RETURNS_DEEP_STUBS);