2016-06-15 56 views
0

我有一個控制器方法。如何從JUNIT測試用例調用Spring Controller的方法使用@RequestBody

@RequestMapping(method = RequestMethod.POST) 
    @ResponseBody 
    public String uploadFiles(@RequestBody MyModel myModel) {...} 

而且我必須從JUNIT測試用例中調用它。

到目前爲止,我嘗試不同的方法,他們中的一些是低於其給我

java.lang.AssertionError: Status expected:<200> but was:<415>

MvcResult result; 
      result = getMockMvc().perform(post("/fileUpload")) 
        .andExpect(status().isOk()) 
        .andReturn(); 

result = getMockMvc().perform(post("/fileUpload").accept(APPLICATION_JSON_CHARSET_UTF_8)) 
         .andExpect(status().isOk()) 
         .andReturn(); 

我不能把我的PARAM在RequestHeader, RequestParam或PathVariable。

回答

1

HTTP狀態415表示不支持的媒體類型,這意味着控制器未接收到它期望的請求媒體類型。

如果您在您的JUnit測試用例中設置了accept(APPLICATION_JSON_CHARSET_UTF_8),那麼您的控制器也應該有consumes = MediaType.APPLICATION_JSON_UTF8_VALUE作爲其@RequestMapping註釋的一部分。

編輯:如果你只問具體怎麼追加請求主體,以JUnit測試,您可以添加:

result = getMockMvc().perform(post("/fileUpload")) .content("payload string") .contentType("application/json; charset=utf-8") .accept(MediaType.APPLICATION_JSON_UTF8_VALUE) .andExpect(status().isOk()) .andReturn();

+0

是的,它現在工作。沒有設置內容(...)。謝謝@Minh謝謝 – Jaikrat

1

你可以試試這個:

MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON) 
      .accept(MediaType.APPLICATION_JSON).content(jsonContent)).andReturn(); 

其中url =「/ fileUpload」和jsonContent是您的請求json內容的字符串類型。

+0

。你的方法也是對的。但是我們可以添加'.andExpect(status()。isOk())'。 – Jaikrat

相關問題