spring-test и тест контроллера mockito

@Test
public void testWelcomePage() throws Exception {
    UserDto dto = new UserDto("admin");
    UserEntity user = new UserEntity("admin");
    when(userServiceMock.getUser(dto)).thenReturn(user);

    mockMvc.perform(get("/main/user/welcome?loginId=admin"))
        .andExpect(status().isOk())
        .andExpect(view().name("user/welcome"))
        .andExpect(forwardedUrl("/WEB-INF/pages/user/welcome.jsp")) 
        .andExpect(model().attribute("user", hasProperty("loginId", is("admin")))); //-->java.lang.AssertionError: Model attribute 'user' .... but: was null...

    verify(userServiceMock, times(1)).getUser(dto); //-->Argument(s) are different! Wanted:
    verifyNoMoreInteractions(userServiceMock);
}

UserDto - это объект, передаваемый объектом формы Spring MVC.

@RequestMapping(value="/welcome", method = RequestMethod.GET)
public String welcome(UserDto userDto, ModelMap model, Locale locale) {
    UserEntity user = null;
    try {
        user = userService.getUser(userDto);
    } catch (DataNotFoundException e) {
        e.printStackTrace();
        model.addAttribute("message", messageSource.getMessage("msg.data.notfound", null, locale));
    }
    model.addAttribute("user", user);
    return "user/welcome";
}

Но mockito выдает ошибку утверждения при переданном аргументе (идентификатор UserDto отличается). Как я могу это исправить?


person user2833579    schedule 01.10.2013    source источник
comment
Возможно, вам не нужна проверка, разве недостаточно того, что user есть в модели?   -  person Jonathan    schedule 01.10.2013
comment
Я предполагаю, что объект UserDto, который вы ожидаете в своем макете, когда (userServiceMock.getUser (dto)). thenReturn (user); не совпадает с объектом UserDto в фактическом выражении userService.getUser(userDto); Вот почему он на самом деле не издевается над фактическим оператором во время выполнения, поэтому он возвращает ноль. Объект, передаваемый фактическому оператору во время выполнения, должен быть таким же, как объект во время ожидания, тогда только он вернет ожидаемый объект.   -  person Raju Rudru    schedule 02.10.2013


Ответы (1)


Объект UserDto должен переопределить метод equals().

@Override
public boolean equals(Object obj) {
    return EqualsBuilder.reflectionEquals(this, obj);
}

завершенный!

person user2833579    schedule 02.10.2013