当前位置: 首页 > 知识库问答 >
问题:

junit mockito对控制器和服务方法使用相同的对象

汲永嘉
2023-03-14

我的控制器

@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对象转换为string并将其发布到控制器方法。我正在尝试模拟userService.validateUser()将返回新的空User对象的服务方法。由于发布到service方法的对象和控制器接收到的对象不同,所以service返回null。如何让service方法返回空用户对象?

共有1个答案

令狐烨烨
2023-03-14

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

您可以在when()中使用通配符接受。然后()

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

或者我将使用的语法:

doReturn(new User()).when(userService).validateUser(Mockito.any(User.class));
 类似资料:
  • 问题内容: 我一直看到在AngularJS中创建控制器和服务的不同示例,我很困惑,有人可以向我解释两种方法之间的区别吗? 还有一个控制器示例: 问题答案: 第一个将污染全局名称空间,从长远来看,这不是您想要的。 第二个将控制器的作用域限定为该模块实例。它也可以注射。最好还是使用数组符号(如下所示),因为这会在最小化后继续存在。 (角度)服务与工厂之间的差异似乎很小。服务包装了工厂,工厂使用$ in

  • 我有多达10个方法在一个控制器,他们应该有相同的名称和逻辑,但不同的头。请求路径前缀可能不同。 如何简化REST控制器,而不是创建两个不同的控制器,使用相同的方法和相同的逻辑? 我尝试了几个例子来创建一个控制器,该控制器具有两个不同的接口,方法相同,但映射不同。 控制器仅与第一个接口映射。因此工作正常,但-获取错误代码。这意味着Java Spring-Boot没有这样的功能。需要更多的点子。 用开

  • 你好,我有一个简单的问题,假设我有一个类如下: 上面的类表示负责将图像大小调整为给定大小的单个任务。我有很多要求将此图像的大小调整为许多不同的大小。 我的问题是:如何在项目反应器中实现并行独立任务负责调整图像大小?如果没有项目Reactor,我将使用CompletableFuture列表: 具有指定的执行者服务。此外,在我的例子中,我在subscribeOn方法和supplyAsync中使用了同一

  • 问题内容: 我有一个角度控制器,可在创建时获取资源: 现在,我想向控制器添加逻辑以能够创建“属性”资源: 但是,当我在表单上创建“属性”时,将进行不必要的调用以首先获取所有属性。如何避免这种情况? 潜在的解决方案? 我可以创建一个单独的控制器,专门用于创建不会获取属性的Property。但是,这将使封装单个资源在单个控制器下的所有CRUD操作变得更加简单。 我可以创建一个函数来获取所有属性。但是,

  • 问题内容: 我尝试过一些关于绑定和未绑定方法的代码。当我们调用它们时,我认为它们都会返回对象。但是,当我用于获取一些信息时,它返回的内容我并不理解。 IDE:Eclipse 插件:pydev 输出是… 为什么#1和#2返回相同的ID?他们不是不同的对象吗?如果我们分配和两个变量,#3,#4回报不同的ID。 我认为#3和#4表明它们不是同一对象,而是#1和#2 … 绑定方法的ID和未绑定方法的ID有

  • 本文向大家介绍Jmeter逻辑控制器事务控制器使用方法解析,包括了Jmeter逻辑控制器事务控制器使用方法解析的使用技巧和注意事项,需要的朋友参考一下 一、基本概念: Transaction controller:一般是指要做的或所做的事情,在关系数据库一个事务可以是一条SQL语句,一组SQL语句或整个程序、在实际的工作过程中,将完成一个业务的一系列操作称作为事务,我们来举最为典型的用户登录场景为