5

In my Spring controller I have a method that returns the following json:

[
  {
    "id": 2,
    "dto": null,
    "user": {
      "userId": 2,
      "firstName": "Some",
      "lastName": "Name",
      "age": 100,
      "aboutMe": "boring"
    },
    "isYoung": false,
    "isOk": false
  }
]

I'm trying to write a test for this getter.Here is my test:

@Test
public void getterMethod() throws Exception{
    mockMvc.perform(get("/path?id=1")).andExpect(status().isOk())
        .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
        .andExpect(jsonPath("$[0].id", is(2)))
        .andExpect(jsonPath("$[2].user.userId", is(2)))
        .andExpect(jsonPath("$[2].user.firstName", is("Giorgos")))
        .andExpect(jsonPath("$[2].user.lastName", is("Ant")))
        .andExpect(jsonPath("$[3].isYoung", is(false)))
        .andExpect(jsonPath("$[4].isOk", is(false)));
}

Apparently I'm not getting this right:

Although if I run the test only for the $[0].id the test passes. However for all the rest cases (for the nested user object and isYoung fiels and isOk) I'm getting an array index exception error.

Any ideas?Thanks!

1
  • 1
    Should all the array indexes be 0? Since only one element in the test JSON? Commented Apr 12, 2017 at 20:30

1 Answer 1

7

Should the test be:

@Test
public void getterMethod() throws Exception{
    mockMvc.perform(get("/path?id=1")).andExpect(status().isOk())
        .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
        .andExpect(jsonPath("$[0].id", is(2)))
        .andExpect(jsonPath("$[0].user.userId", is(2)))
        .andExpect(jsonPath("$[0].user.firstName", is("Some")))
        .andExpect(jsonPath("$[0].user.lastName", is("Name")))
        .andExpect(jsonPath("$[0].isYoung", is(false)))
        .andExpect(jsonPath("$[0].isOk", is(false)));
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.