Метод Mockito.when().thenReturn() и Mockito.doreturn().when() не возвращает указанное фиктивное значение

    @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;

    }

Это мой фактический метод обслуживания. при тестировании он дает мне значение null для переменных existsUser и 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;
    }

Я пытаюсь написать тестовый пример и имитировать методы findByEmail() и save(), но во время издевательств я не получаю взамен пользовательский объект, упомянутый в thenreturn() и doreturn().

Кто-нибудь может помочь.


person Shreya Mahajan    schedule 20.04.2018    source источник
comment
Почему вы издеваетесь над UserRepository дважды, используя @Mock, а затем используя Mockito.mock в методе initMocks?   -  person Shanu Gupta    schedule 20.04.2018
comment
Также не могли бы вы предоставить тестируемый метод?   -  person Shanu Gupta    schedule 20.04.2018
comment
@ShanuGupta Я только что добавил фактический метод обслуживания. Я новичок в этом, так что извините за некоторые глупые ошибки.   -  person Shreya Mahajan    schedule 20.04.2018


Ответы (1)


Вот что вы можете попробовать:

Пожалуйста, удалите mockUserRepository = Mockito.mock(UserRepository.class); как лишнее.

Вместо

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

сделай это

Mockito.doReturn(user).when(mockUserRepository).findByEmail(Mockito.any()); 
person Shanu Gupta    schedule 20.04.2018
comment
Большой! Продолжайте исследовать. - person Shanu Gupta; 20.04.2018