带有@RequestParam注释的参数可以使用:post(“/ ****** / ***”).param(“variable”,“value”)传递
但是如何传递具有@RequestBody注释的参数值?
我的测试方法是:
@Test public void testCreateCloudCredential() throws Exception { CloudCredentialsBean cloudCredentialsBean = new CloudCredentialsBean(); cloudCredentialsBean.setCloudType("cloudstack"); cloudCredentialsBean.setEndPoint("cloudstackendPoint"); cloudCredentialsBean.setUserName("cloudstackuserName"); cloudCredentialsBean.setPassword("cloudstackpassword"); cloudCredentialsBean.setProviderCredential("cloudstackproviderCredential"); cloudCredentialsBean.setProviderIdentity("cloudstackproviderIdentity"); cloudCredentialsBean.setProviderName("cloudstackproviderName"); cloudCredentialsBean.setTenantId(78); cloudCredentialsBean.setCredentialId(98); StatusBean statusBean = new StatusBean(); statusBean.setCode(200); statusBean.setStatus(Constants.SUCCESS); statusBean.setMessage("Credential Created Successfully"); Gson gson = new Gson(); String json = gson.toJson(cloudCredentialsBean); ArgumentCaptor<String> getArgumentCaptor = ArgumentCaptor.forClass(String.class); ArgumentCaptor<Integer> getInteger = ArgumentCaptor.forClass(Integer.class); ArgumentCaptor<CloudCredentialsBean> getArgumentCaptorCredential = ArgumentCaptor.forClass(CloudCredentialsBean.class); when( userManagementHelper.createCloudCredential(getInteger.capture(),getArgumentCaptorCredential.capture())).thenReturn( new ResponseEntity<StatusBean>(statusBean,new HttpHeaders(),HttpStatus.OK)); mockMvc.perform( post("/usermgmt/createCloudCredential").param("username","aricloud_admin").contentType( MediaType.APPLICATION_JSON).content(json)).andExpect( status().isOk()); }
正在测试的控制器方法是:
@RequestMapping(value = "/createCloudCredential",method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE,consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<StatusBean> createCloudCredential( @RequestParam("userId") int userId,@RequestBody CloudCredentialsBean credential) { return userManagementHepler.createCloudCredential(userId,credential); }
我得到的错误是:
如何在此处传递凭证的模拟值?
解决方法
POST请求通常会在其正文中传递其参数.所以我无法通过同一个请求提供参数和内容来理解您的期望.
所以在这里,你可以简单地做:
mockMvc.perform( post("/usermgmt/createCloudCredential").contentType( MediaType.APPLICATION_JSON).content(json)).andExpect( status().isOk());
如果需要传递参数“username = aricloud_admin”,请将其添加到JSON字符串,或者将其作为查询字符串显式传递:
mockMvc.perform( post("/usermgmt/createCloudCredential?username=aricloud_admin") .contentType(MediaType.APPLICATION_JSON).content(json)) .andExpect(status().isOk());