2012-11-13 4 views
3

웹 컨트롤러를 테스트하기 위해 Spring의 "spring-test-mvc"라이브러리를 사용하고 있습니다. JSON 배열을 반환하는 매우 간단한 컨트롤러가 있습니다. 그런 다음 내 테스트에서 내가 가진 :spring-test-mvc jsonpath로 테스트하면 null이 반환됩니다.

@Test 
public void shouldGetAllUsersAsJson() throws Exception { 
    mockMvc.perform(get("/v1/users").accept(MediaType.APPLICATION_JSON)) 
      .andExpect(content().mimeType(MediaType.APPLICATION_JSON)) 
      .andExpect(jsonPath("fName").exists()); 
} 

위의 테스트 반환 :

java.lang.AssertionError: No value for JSON path: fName 

빠르게 실제로 나는 아래의 테스트 실행 무엇을 얻을 확인하려면 다음

@Test 
public void shouldPrintResults() throws Exception { 
    mockMvc.perform(get("/v1/users").accept(MediaType.APPLICATION_JSON)) 
      .andDo(print()); 
} 

을 그리고 그것은을 반환 MockHttpServletResponse의 본체에서 올바른 JSON 배열

jsonPath이 아닌지 확실하지 않습니다. JSON 배열에서 fName을 볼 수 있습니다.

답변

10

maven에 json 경로 종속성을 추가하거나 lib에 jar를 추가하면 작동합니다. Spring이 최신 Spring 3.2.0 RC1 릴리스에서 jsonPath 의존성을 포함하지 않는다고 생각합니다. 나는 이것이 Spring-Test-MVC 독립형 프로젝트에서도 동일하다고 생각한다. 당신은 또한 jsonPath를 사용하도록 hamcrest 라이브러리를해야 할 수도 있습니다

<dependency> 
    <groupId>com.jayway.jsonpath</groupId> 
    <artifactId>json-path</artifactId> 
    <version>0.8.1</version> 
    <scope>test</scope> 
</dependency> 

값 ("테스트")

<dependency> 
    <groupId>org.hamcrest</groupId> 
    <artifactId>hamcrest-library</artifactId> 
    <version>1.3</version> 
    <scope>test</scope> 
</dependency> 
+0

이러한 종속성을 제 위치에두고 있습니다. 불운. 같은 오류 메시지. – jsf

9

: 여기

은 메이븐의 의존성이다 ("$ 테스트."). 귀하의 json 대응 본문은 어떻게 생겼습니까? .andDo(print())

jsonPath("$.fName")을 시도해 볼 수도 있습니다. 당신의 응답이 배열은 그 다음이다 {"fName":"first name"}

경우 같은 응답을 jsonPath("$[0].fName")이 필요합니다 :

은 JSON 응답이 있다고 가정한다 http://goessner.net/articles/JsonPath/

: 당신은 더 많은 예를 볼 수 있습니다 [{"fName":"first name"},{"fName":"first name #2"}]