You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MockMvc与Mockito测试Get接口返回结果不符的问题

问题分析与修复方案

问题根源

你在Mockito中配置orderService.getOrdersUserId(1)的返回值时,传入的是包含全部3条订单的完整列表,而非仅属于user_id=1的订单。这直接导致测试接口返回了全量数据,和实际接口的筛选逻辑不符。

修复步骤

  1. 准备仅包含目标用户(user_id=1)订单的列表;
  2. 将这个筛选后的列表作为thenReturn的参数,替换原来的全量列表。

修复后的代码示例

// 直接初始化仅包含user_id=1的订单列表
List<Order> user1Orders = new ArrayList<>();
Order order1 = new Order(1, 1, 11.0, "Pending");
Order order3 = new Order(3, 1, 13.0, "Shipped");
user1Orders.add(order1);
user1Orders.add(order3);

// 也可以通过流从全量列表过滤(如果需要保留全量列表的话)
// List<Order> user1Orders = orderList.stream()
//         .filter(order -> order.getUser_id() == 1)
//         .collect(Collectors.toList());

// 配置mock方法返回筛选后的列表
Mockito.when(orderService.getOrdersUserId(1)).thenReturn(user1Orders);

mockMvc.perform(MockMvcRequestBuilders.get("/api/order/getOrders/user/{user_id}", 1).contentType(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk())
        .andDo(print())
        .andExpect(jsonPath("$", hasSize(2)));

补充说明

单元测试中,orderService是被mock的对象,它不会执行实际的筛选逻辑——你给它指定什么返回值,它就会返回什么。所以必须手动构造符合预期的返回数据,才能和接口的实际行为匹配,通过断言校验。

内容的提问来源于stack exchange,提问作者Kim Gordon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:45:56