简体   繁体   English

使用 MockMvc 和 Mockito 的测试 Get 方法

[英]Test Get method using MockMvc and Mockito

I'm working on writing test case using MockMvc and Mokito.我正在使用 MockMvc 和 Mokito 编写测试用例。

Assume I have a list of order:假设我有一个订单列表:

{
   {
    "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",
   },
}

The column order_id is unique since I set it as primary key.order_id唯一的,因为我将其设置为主键。 But one user can have multiple orders so the column user_id can appear multiple times.但是一个用户可以有多个订单,因此 user_id 列可以出现多次。

When I tried the endpoint /api/order/getOrders/user/{user_id} in Postman (For example, I set user_id = 1).当我在Postman中尝试端点/api/order/getOrders/user/{user_id}时(例如,我设置 user_id = 1)。 The response is exactly same what I expected:响应与我的预期完全相同:

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

However, when I tried to write the unit test case using MockMvc and Mockito.但是,当我尝试使用 MockMvc 和 Mockito 编写单元测试用例时。 It always return all the orders.它总是返回所有的订单。 Here is my code:这是我的代码:

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)));

The test is failed because the response include all 3 items.测试失败,因为响应包括所有 3 个项目。 I believe that I was wrong by using thenReturn(orderList) but I have no idea to fix it.我相信使用thenReturn(orderList)是错误的,但我不知道要修复它。 Can someone let me know how can I fix it, please?有人可以让我知道我该如何解决吗?

The order list that you return has all three orders in it so it's always going to return all of them.您返回的订单列表中包含所有三个订单,因此它总是会返回所有订单。 If you are mocking the behaviour then just add orders 1 and 3如果您是 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