繁体   English   中英

使用 MockMvc 和 Mockito 的测试 Get 方法

[英]Test Get method using MockMvc and Mockito

我正在使用 MockMvc 和 Mokito 编写测试用例。

假设我有一个订单列表:

{
   {
    "order_id": 1,
    "user_id": 1,
    "price": 11.0,
    "order_status": "Pending",
   },
    {
    "order_id": 2,
    "user_id": 2,
    "price": 12.0,
    "order_status": "Cancelled",
   }, 
   {
    "order_id": 3,
    "user_id": 1,
    "price": 13.0,
    "order_status": "Delivered",
   },
}

order_id唯一的,因为我将其设置为主键。 但是一个用户可以有多个订单,因此 user_id 列可以出现多次。

当我在Postman中尝试端点/api/order/getOrders/user/{user_id}时(例如,我设置 user_id = 1)。 响应与我的预期完全相同:

{
   {
    "order_id": 1,
    "user_id": 1,
    "price": 11.0,
    "order_status": "Pending",
   },
   {
    "order_id": 3,
    "user_id": 1,
    "price": 13.0,
    "order_status": "Delivered",
   },
}

但是,当我尝试使用 MockMvc 和 Mockito 编写单元测试用例时。 它总是返回所有的订单。 这是我的代码:

List<Order> orderList = new ArrayList<>();

Order order1 = new Order(1, 1, 11.0, "Pending");
Order order2 = new Order(2, 2, 12.0, "Cancelled");
Order order3 = new Order(3, 1, 13.0, "Shipped");

orderList.add(order1);
orderList.add(order2);
orderList.add(order3);

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

测试失败,因为响应包括所有 3 个项目。 我相信使用thenReturn(orderList)是错误的,但我不知道要修复它。 有人可以让我知道我该如何解决吗?

您返回的订单列表中包含所有三个订单,因此它总是会返回所有订单。 如果您是 mocking 行为那么只需添加订单 1 和 3

List<Order> orderList = new ArrayList<>();

Order order1 = new Order(1, 1, 11.0, "Pending");
Order order2 = new Order(2, 2, 12.0, "Cancelled");
Order order3 = new Order(3, 1, 13.0, "Shipped");

orderList.add(order1);
orderList.add(order3);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM