Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mockito MVC-如何为@RequestParam绑定字符串数组传递值_Java_Unit Testing_Spring Mvc_Mockito - Fatal编程技术网

Java Mockito MVC-如何为@RequestParam绑定字符串数组传递值

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

我想用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[] 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 = []