Shreya Mahajan
Shreya Mahajan

Reputation: 79

Method Mockito.when().thenReturn() and Mockito.doreturn().when() not returning specified mock value

    @InjectMocks
    private UserServiceImpl userService;

    @Mock
    private UserRepository  mockUserRepository;



    //private UserServiceImpl userServiceImpl;

    @Before
    public void initMocks() throws Exception {

        MockitoAnnotations.initMocks(this);
        mockUserRepository = Mockito.mock(UserRepository.class);
    }

    @Test
    public void testCreateUser() {

        User user = createUser();
        Mockito.doReturn(user).when(mockUserRepository).findByEmail(user.getEmail());       

        Mockito.when(mockUserRepository.save(user)).thenReturn(user);
        userService.createUser(user);
    }

private User createUser() {

        User user = new User();
        user.setFirstName("Shreya");
        user.setLastName("Mahajan");
        user.setEmail("[email protected]");
        user.setRole("admin");
        user.setPassword("shreya123");

        return user;

    }

This is my actual service method. while testing it gives me null on variables existingUser and response

@Override
    public ResponseVO createUser(User user) {
        ResponseVO responseVO = new ResponseVO();
        User existingUser = userRepository.findByEmail(user.getEmail());
        if(user.getEmail() != null){
            if(existingUser != null){
                responseVO.setStatusCode("500");
                responseVO.setMessage("user Already Exists");
            }else{              
                User response = userRepository.save(user);
                if(response == null){
                    responseVO.setStatusCode("400");
                    responseVO.setMessage("Failure");                       
                }else{
                    responseVO.setStatusCode("200");
                    responseVO.setMessage("Success");       
                }
            }           
        }
        return responseVO;
    }

I am trying to write a test case and mock methods findByEmail() and save() but while mocking i am not receiving the user object in return mentioned in thenreturn() and doreturn().

Can anyone please help.

Upvotes: 2

Views: 2091

Answers (1)

Shanu Gupta
Shanu Gupta

Reputation: 3817

Here are somethings you can try:

Please remove mockUserRepository = Mockito.mock(UserRepository.class); as its redundant.

Instead of

Mockito.doReturn(user).when(mockUserRepository).findByEmail(user.getEmail()); 

do this

Mockito.doReturn(user).when(mockUserRepository).findByEmail(Mockito.any()); 

Upvotes: 2

Related Questions