모의 MVC - 테스트할 요청 매개 변수 추가
컨트롤러를 테스트하기 위해 스프링 3.2 모의 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);
}
그리고 나는 다음과 같은 시험을 썼다.
@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"));
}
내가 얻는 것은
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)
왜 이런 일이 생기는 거죠?@RequestParam을 통과하는 것이 올바른 방법입니까?
내가 네 코드를 분석했을 때.나도 같은 문제에 직면했지만, 내 문제는 이름과 성이 모두 정상적으로 동작하고 있다는 것을 의미하지만, 내가 하나의 값만 지정하면 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"));
}
문제가 있다면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);
}
이 질문에 동시에 여러 파라미터를 추가하는 방법을 찾는 사람이 있다면(내 경우).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())
@ModelAttribute
는 특정 오브젝트유형에 대한 요구 파라미터의 스프링매핑입니다.그래서 당신의 파라미터는userClient.username
그리고.userClient.firstName
MockMvc가 브라우저로부터의 요청을 모방할 때 Spring이 실제로 작성하기 위해 폼에서 사용하는 파라미터를 입력해야 합니다.UserClient
물건.
(Model Attribute는 폼에서 들어오는 여러 필드에서 객체를 작성하는 데 도움이 된다고 생각합니다만, 더 나은 정의를 얻기 위해 읽기를 원할 수도 있습니다.)
언급URL : https://stackoverflow.com/questions/17972428/mock-mvc-add-request-parameter-to-test
'sourcetip' 카테고리의 다른 글
Ajax 요청에 CSRFToken 추가 (0) | 2023.03.19 |
---|---|
객체 문자 표기법에서 "리터럴"의 의미는 무엇입니까? (0) | 2023.03.19 |
Angular JS 디렉티브 $destroy (0) | 2023.03.19 |
뉴턴 소프트IEnumerable 유형의 속성을 가진 Json 직렬화 및 직렬화 해제 클래스 (0) | 2023.03.14 |
워드프레스 이미지에서 날짜를 제거하시겠습니까? (0) | 2023.03.14 |