2014-02-27 30 views
1

我只是試圖使用MockHttpServletRequestBuilder測試Spring控制器方法。控制方法的簽名如下:正確設置MockHttpServletRequestBuilder的RequestBody

@RequestMapping(value = "/assignTeamsToUsers", method = RequestMethod.POST) 
public @ResponseBody String assignUsersToTeams(Model model, @RequestBody MultiValueMap<String, String> ids). 

在我的測試情況下,我有:

MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(applicationContext).build(); 
MockHttpServletRequestBuilder request = createRequest(uri, method); 

//set up request object...Not sure how?? 
//My current attempt: 
    String body = "userIds[]=0&teamIds[]=0"; 
    request.content(body); 
    request.accept(MediaType.ALL); 
    request.contentType(MediaType.APPLICATION_FORM_URLENCODED); 

ResultActions resultActions = mockMvc.perform(request); 

編輯:顯示的createRequest。 「method =」POST「

private MockHttpServletRequestBuilder createRequest (String uri, String method) { 
    MockHttpServletRequestBuilder builder = null; 

    if("GET".equalsIgnoreCase(method)) 
     builder = MockMvcRequestBuilders.get(uri); 
    else if("POST".equalsIgnoreCase(method)) 
     builder = MockMvcRequestBuilders.post(uri); 
    else 
     Assert.fail("Unsupported method!"); 

    //We always create requests for user Manager 
    builder.header("securityRole", Role.Manager.getDisplayName()); 

    return builder; 

} 

我知道uri和方法是正確的。我的問題是我收到了來自Spring的錯誤代碼。基本上,我不知道如何設置request對象以使MultiValueMap具有合適的@RequestBody。我嘗試了很多設置request.content的變體,設置request.accept,request.contentType,request.characterEncoding,並且仍然每次遇到415錯誤。

如果是任何幫助,我可以成功發佈到這個端點使用Web界面,這裏是請求的樣子鉻:

enter image description here

+0

你在哪裏使用'request'? –

+0

在我的測試案例中......我不確定我是否理解你的問題。儘管我更新了我的問題以顯示更多的測試代碼。 – jlars62

+0

好的,所以我想看看'createRequest'的作用是什麼?什麼是'方法'? –

回答

5

我最終通過執行解決這一如下:

MockHttpServletRequestBuilder request = MockMvcRequestBuilders.post("whatever url"); 
request.contentType(MediaType.APPLICATION_FORM_URLENCODED); 

//set key value pairs 
//also the keys do not have to be unique, two keys of the same value will both get added 
request.param("key", "value"); 

MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(applicationContext).build(); 
ResultActions resultActions = mockMvc.perform(request); 
// make sure response is valid 

希望這可以引導其他人朝着正確的方向前進。 謝謝