【问题标题】:junit mockito use same object for controller and service methodjunit mockito 对控制器和服务方法使用相同的对象
【发布时间】:2018-10-24 10:44:24
【问题描述】:

我的控制器

@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() 将返回新的空用户对象的服务方法。由于发布到服务方法的对象与控制器接收的对象不同,因此服务返回 null。如何让服务方法返回空的用户对象?

【问题讨论】:

    标签: unit-testing spring-mvc junit mockito


    【解决方案1】:

    您在测试用例中创建的用户对象(传递给mockMvc)是传递给login 方法的对象的不同实例。

    您可以在when().then() 中使用通配符接受:

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

    或者我会使用的语法:

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

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 2022-11-11
      • 2021-08-27
      • 1970-01-01
      • 2019-06-29
      • 2015-07-30
      • 2019-12-28
      • 1970-01-01
      • 2014-11-27
      相关资源
      最近更新 更多