jac*_*ind 65 spring spring-mvc spring-mvc-test
我使用spring 3.2 mock mvc来测试我的控制器.我的代码是
@Autowired
private Client client;
@RequestMapping(value = "/user", method = RequestMethod.GET)
public String initUserSearchForm(ModelMap modelMap) {
User user = new User();
modelMap.addAttribute("User", user);
return "user";
}
@RequestMapping(value = "/byName", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public
@ResponseBody
String getUserByName(@RequestParam("firstName") String firstName,
@RequestParam("lastName") String lastName, @ModelAttribute("userClientObject") UserClient userClient) {
return client.getUserByName(userClient, firstName, lastName);
}
Run Code Online (Sandbox Code Playgroud)
我写了以下测试:
@Test
public void testGetUserByName() throws Exception {
String firstName = "Jack";
String lastName = "s";
this.userClientObject = client.createClient();
mockMvc.perform(get("/byName")
.sessionAttr("userClientObject", this.userClientObject)
.param("firstName", firstName)
.param("lastName", lastName)
).andExpect(status().isOk())
.andExpect(content().contentType("application/json"))
.andExpect(jsonPath("$[0].id").exists())
.andExpect(jsonPath("$[0].fn").value("Marge"));
}
Run Code Online (Sandbox Code Playgroud)
我得到的是
java.lang.AssertionError: Status expected:<200> but was:<400>
at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:60)
at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:89)
at org.springframework.test.web.servlet.result.StatusResultMatchers$5.match(StatusResultMatchers.java:546)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:141)
Run Code Online (Sandbox Code Playgroud)
为什么会这样?是通过@RequestParam的正确方法
mut*_*thu 88
当我分析你的代码.我也面临同样的问题,但我的问题是,如果我给名字和姓氏都有价值意味着它工作正常.但是,当我只给出一个值意味着它说400.无论如何使用.andDo(print())方法来找出错误
public void testGetUserByName() throws Exception {
String firstName = "Jack";
String lastName = "s";
this.userClientObject = client.createClient();
mockMvc.perform(get("/byName")
.sessionAttr("userClientObject", this.userClientObject)
.param("firstName", firstName)
.param("lastName", lastName)
).andDo(print())
.andExpect(status().isOk())
.andExpect(content().contentType("application/json"))
.andExpect(jsonPath("$[0].id").exists())
.andExpect(jsonPath("$[0].fn").value("Marge"));
}
Run Code Online (Sandbox Code Playgroud)
如果您的问题是org.springframework.web.bind.missingservletrequestparameterexception您必须将代码更改为
@RequestMapping(value = "/byName", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public
@ResponseBody
String getUserByName(@RequestParam( value="firstName",required = false) String firstName,
@RequestParam(value="lastName",required = false) String lastName, @ModelAttribute("userClientObject") UserClient userClient) {
return client.getUserByName(userClient, firstName, lastName);
}
Run Code Online (Sandbox Code Playgroud)
如果有人来到这个问题,寻找能够在同一时间(我的情况),您可以使用添加多个参数.params用MultivalueMap而不是增加每个.param:
LinkedMultiValueMap<String, String> requestParams = new LinkedMultiValueMap<>()
requestParams.add("id", "1");
requestParams.add("name", "john");
requestParams.add("age", "30");
mockMvc.perform(get("my/endpoint").params(requestParams)).andExpect(status().isOk())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112779 次 |
| 最近记录: |