Java Mockito MVC-如何为@RequestParam绑定字符串数组传递值
我想用Mockito编写一个单元测试 测试方法由Spring MVC编写,如下所示:Java Mockito MVC-如何为@RequestParam绑定字符串数组传递值,java,unit-testing,spring-mvc,mockito,Java,Unit Testing,Spring Mvc,Mockito,我想用Mockito编写一个单元测试 测试方法由Spring MVC编写,如下所示: @RequestMapping(value = "/save", method = RequestMethod.POST, produces = "text/html;charset=UTF-8") @ResponseBody public String save(String appName, @RequestParam(value = "platforms[]") String[] plat
@RequestMapping(value = "/save", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")
@ResponseBody
public String save(String appName,
@RequestParam(value = "platforms[]") String[] platforms,
HttpServletRequest request) {}
我尝试了几种方法来模拟请求值平台,即绑定字符串数组,比如“string[]”
但是,它似乎仍然不起作用:platforms值为null
以下是我尝试的方法:
Way#1
final String[] platforms = { "Android", "iOS" };
request.setAttribute("platforms", platforms);
request.setAttribute("platforms[]", platforms);
Way#2
mockMvc.perform(MockMvcRequestBuilders.post("/application/save")
.session(session).requestAttr("platforms[]", platforms)
.requestAttr("platforms", platforms)
.param("appName", "Just for test"));
注意:请求是一个模拟对象(MockHttpServletRequest)
希望你能给我一些想法来解决这个问题。谢谢
有关更多信息,请参见按第2种方式打印时的打印结果:
如果在路径2上的.perform之后添加.andDo(print()),将打印什么?(print()是MockMvcResultHandlers的一个方法)。@Jean-FrançoisSavard感谢您的建议。某些信息打印如下:MockHttpServletResponse:Status=400错误消息=必需的字符串[]参数“platforms[]”不存在标头={}内容类型=null Body=转发URL=null重定向URL=null Cookies=[]尝试将平台作为.param而不是requestAttr传递。根据文档,.param用于设置请求参数,而requestAttr用于设置请求属性。@Jean FrançoisSavard感谢您的建议。我尝试设置一个请求参数,如。param(“platforms[]”,“Andriod,iOS”)。param(“platforms”,“Andriod,iOS”)正在工作,谢谢
MockHttpServletRequest:
HTTP Method = POST
Request URI = /application/save
Parameters = {appName=[Just for test]}
Headers = {}
Handler:
Type = com.xxx.controller.ApplicationController
Method = public java.lang.String com.xxx.controller.ApplicationController.save(java.lang.String,java.lang.String[],javax.servlet.http.HttpServletRequest)
Resolved Exception:
Type = org.springframework.web.bind.MissingServletRequestParameterException
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
MockHttpServletResponse:
Status = 400
Error message = Required String[] parameter 'platforms[]' is not present
Headers = {}
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []