junit mockito использует один и тот же объект для контроллера и метода обслуживания - PullRequest
0 голосов
/ 24 октября 2018

Мой контроллер

@RequestMapping(value="/login", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
        public User login(@RequestBody User user){
            User u = userService.validateUser(user);
            if(u != null){
                return u;
            }
            return null;
        }

Это мой тестовый пример для моего контроллера

@Test
    public void testUserController() throws Exception {
         User u = new User();
         u.setEmail("12a@gm.com");
         u.setPassword("00000");
         Gson gson = new Gson();
         String data = gson.toJson(u);
         when(userService.validateUser(u)).thenReturn(new User());
         String response = mockMvc.perform(post("/login").contentType(MediaType.APPLICATION_JSON).content(data)).andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
         assertTrue(response.equals("hi"));
    }

Я преобразую объект User в строку и отправляю его в метод контроллера.Я пытаюсь смоделировать метод службы, где userService.validateUser () вернет новый пустой объект User.Поскольку объект, отправленный методу службы, и объект, полученный контроллером, отличаются, служба возвращает ноль.Как сделать так, чтобы сервисный метод возвращал пустой пользовательский объект?

1 Ответ

0 голосов
/ 24 октября 2018

Пользовательский объект, который вы создаете в тестовом примере (который передается mockMvc), является другим экземпляром объекта, который передается в методе login.

Вы можете использовать подстановочный знак в вашем when().then():

when(userService.validateUser(Mockito.any(User.class))).thenReturn(new User());

или синтаксис, который я бы использовал:

doReturn(new User()).when(userService).validateUser(Mockito.any(User.class));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...