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.
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.
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.
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.
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.
Adding RETURNS_DEEP_STUBS did the trick:
A a = Mockito.mock(A.class, Mockito.RETURNS_DEEP_STUBS);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With