使用MockMvc做controller接口测试
测试主体部分如下:
@Test public void test() throws Exception { //请求参数 String requestInfo = "{ \"app_key\": \"*********\", \"cust_account\": \"********\",\"product_key\": \"*****\"}"; this.mockMvc .perform(post("/queryPhoneResource").accept(MediaType.APPLICATION_JSON) .content(requestInfo)) .andDo(print()) //添加断言 .andExpect(status().isOk()); }
打印结果:
MockHttpServletRequest: HTTP Method = POST Request URI = /queryPhoneResource Parameters = {} Headers = {Accept=[application/json]} Handler: Type = com.***.controller.*** Async: Was async started = false Async result = null Resolved Exception: Type = null ModelAndView: View name = null View = null Model = null FlashMap: MockHttpServletResponse: Status = 200 Error message = null Headers = {flag=[0000], desc=[成功]} Content type = null Body = {"flag":"0000","desc":"æå","data":{"surplusResources":"24000","afterChargingResources":"500"}} Forwarded URL = null Redirected URL = null Cookies = []
可以看到标黄的地方乱码,这是为什么呢?
通过ResultActions拿到response再进行编码设置
ResultActions resultActions = this.mockMvc.perform(post(requestUrl) .accept(MediaType.APPLICATION_JSON) .content(requestParam)); resultActions.andReturn().getResponse().setCharacterEncoding("UTF-8"); //添加断言 resultActions.andDo(print()).andExpect(status().isOk());
输出结果:
MockHttpServletRequest: HTTP Method = POST Request URI = /queryPhoneResource Parameters = {} Headers = {Accept=[application/json]} Handler: Type = com.***.controller.*** Async: Was async started = false Async result = null Resolved Exception: Type = null ModelAndView: View name = null View = null Model = null FlashMap: MockHttpServletResponse: Status = 200 Error message = null Headers = {flag=[0000], desc=[成功]} Content type = null Body = {"flag":"0000","desc":"成功","data":{"surplusResources":"24000","afterChargingResources":"500"}} Forwarded URL = null Redirected URL = null Cookies = []
谢谢,可以解决乱码问题
很棒,解决了问题,谢谢
终于找到想要的答案了