[英]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 = []
我的問題是:
MockHttpServletResponse's
Body是空的;如果您的操作方法(帶有@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.