Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mock nested method calls using mockito

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.

like image 743
Abhijeet Avatar asked Jan 19 '17 01:01

Abhijeet


People also ask

Does Mockito mock call constructor?

Starting with Mockito version 3.5. 0, we can now mock Java constructors with Mockito. This allows us to return a mock from every object construction for testing purposes.

What is difference between @mock and Mockito mock?

Difference between @Mock and @InjectMocks In mockito-based junit tests, @Mock annotation creates mocks and @InjectMocks creates actual objects and injects mocked dependencies into it. Use @InjectMocks to create class instances that need to be tested in the test class.

What can be mocked with Mockito?

Mockito mock method We can use Mockito class mock() method to create a mock object of a given class or interface. This is the simplest way to mock an object. We are using JUnit 5 to write test cases in conjunction with Mockito to mock objects.

How do you call a private method in Mockito?

For Mockito, there is no direct support to mock private and static methods. In order to test private methods, you will need to refactor the code to change the access to protected (or package) and you will have to avoid static/final methods.


1 Answers

Adding RETURNS_DEEP_STUBS did the trick:

A a = Mockito.mock(A.class, Mockito.RETURNS_DEEP_STUBS); 
like image 95
Abhijeet Avatar answered Sep 18 '22 07:09

Abhijeet