Mockito - mocked static method always returns null

Viewed 1649

Hi All i am trying to mock a static method. Below is my sample class looks like.

public class UserHandler{
public User create(Request request)
User user = UserUtil.create(dbs, dba, jo, user);
return user;
} 

this is my test class code

try(MockedStatic<UserUtil> mockedStatic = Mockito.mockStatic(UserUtil.class)) {
        Mockito.when(UserUtil.create(mockDBS, mockAdmin, obj, user)).thenReturn(user);
        User response = handler.create(mockZrequest);
        assertEquals(res, response);
}

But unfortunately i am keep on getting response as Null. Someone could help me.

1 Answers

You must use the MockedStatic instance and a lambda for mocking static methods:

try(MockedStatic<MyUtilsClass> mockedStatic = Mockito.mockStatic(MyUtilsClass.class)) {
    // Use mockedStatic.when() for mocking, NOT Mockito.when(): 
    mockedStatic.when(

        // Use a lambda inside when(), NOT a direct method invocation:
        () -> MyUtilsClass.myStaticMethod(param1, param2)

    ).thenReturn(
        mockedReturnValue
    );
}

in your case it would be:

try(MockedStatic<UserUtil> mockedStatic = Mockito.mockStatic(UserUtil.class)) {
    mockedStatic.when(() -> UserUtil.create(mockDBS, mockAdmin, obj, user)).thenReturn(user);
    // ...
}
Related