복붙노트

[SPRING] spring-test-mvc jsonpath를 사용하여 테스트가 null을 반환합니다.

SPRING

spring-test-mvc jsonpath를 사용하여 테스트가 null을 반환합니다.

나는 Spring의 "spring-test-mvc"라이브러리를 사용하여 웹 컨트롤러를 테스트하고있다. JSON 배열을 반환하는 매우 간단한 컨트롤러가 있습니다. 그렇다면 내 시험에서 나는있다 :

@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을 볼 수없는 이유가 확실하지 않습니다.

해결법

  1. ==============================

    1.json 경로 종속성을 maven에 추가하거나 jar를 lib에 추가하면 작동합니다. Spring이 최신 Spring 3.2.0 RC1 릴리스에서 jsonPath 종속성을 포함하지 않는다고 생각합니다. 나는 이것이 Spring-Test-MVC 독립형 프로젝트에서도 동일하다고 생각한다.

    json 경로 종속성을 maven에 추가하거나 jar를 lib에 추가하면 작동합니다. Spring이 최신 Spring 3.2.0 RC1 릴리스에서 jsonPath 종속성을 포함하지 않는다고 생각합니다. 나는 이것이 Spring-Test-MVC 독립형 프로젝트에서도 동일하다고 생각한다.

    다음은 Maven에 대한 종속성입니다.

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

    jsonPath ( "$. test"). value ( "test")를 사용하려면 hamcrest 라이브러리가 필요할 수도 있습니다.

    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-library</artifactId>
        <version>1.3</version>
        <scope>test</scope>
    </dependency>
    
  2. ==============================

    2.귀하의 json 대응 본문은 어떻게 생겼습니까? 당신은 .andDo (print ())를 사용하여 그것을 볼 수 있습니다.

    귀하의 json 대응 본문은 어떻게 생겼습니까? 당신은 .andDo (print ())를 사용하여 그것을 볼 수 있습니다.

    jsonPath ( "$. fName")를 사용해보십시오.

    이것은 json 응답이 다음과 같다고 가정합니다. { "fName": "이름"}

    응답이 배열이면 다음과 같은 응답을 위해 jsonPath ( "$ [0] .fName")가 필요합니다. [{ ""fName ":"이름 "}, {"fName ":"이름 2 "}]

    http://goessner.net/articles/JsonPath/에서 더 많은 예제를 볼 수 있습니다.

  3. from https://stackoverflow.com/questions/13362372/testing-with-spring-test-mvc-jsonpath-returns-null by cc-by-sa and MIT license