簡體   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