簡體   English   中英

為什么 MockMvc 總是返回空的 content()?

[英]Why does MockMvc always return empty content()?

我正在嘗試使用 mockMvc 測試我的 rest api。

mockMvc.perform(get("/users/1/mobile")
        .accept(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk())
        .andDo(print())
        .andExpect(content().string("iPhone"))

測試失敗的原因是:

java.lang.AssertionError: Response content 
Expected :iPhone
Actual   :

print()的輸出中,我可以知道 API 實際上返回了預期的字符串“iPhone”。

ModelAndView:
        View name = users/1/mobile
             View = null
        Attribute = treeNode
            value = "iPhone"
           errors = []

我猜上面空的“實際”是由下面的空“正文”引起的

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = {}
     Content type = null
             Body = 
    Forwarded URL = users/1/mobile
   Redirected URL = null
          Cookies = []

我的問題是:

  1. 為什么MockHttpServletResponse's Body是空的;
  2. 如何正確測試 API 的響應。

如果您的操作方法(帶有@RequestMapping注釋的方法)返回ModelAndView實例或者您使用Model ,則必須使用MockMvcResultMatchers#model函數對其進行測試:

.andExpect(MockMvcResultMatchers.model().attribute("phone", "iPhone"))
.andExpect(MockMvcResultMatchers.model().size(1))

MockMvcResultMatchers#contnet適用於 REST 操作方法(帶有@RequestBody注釋的方法)。


要更好地了解測試 Spring MVC 和 Spring REST 控制器,請檢查以下鏈接:

只是為這個錯誤添加另一個原因,我花了一整天才發現。 我使用 perform 方法成功地使用 mockito 和 mockmvc 類創建了一個 APITest。 然后復制代碼以生成另一個服務,我開始一遍又一遍地得到一個空的主體。

盡管如此,在一天結束時,我決定將一個項目中的每個復制類與另一個進行比較。 我發現的唯一區別是新控制器接收到的請求 DTO 中的@EqualsAndHashCode注釋。

因此,建議是:在 DTO 類中添加@EqualsAndHashCode注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM