Compare JSON response using JUnit and JSONassert

13,686

Solution 1

You can get the data as String and pass it into JSONAssert.assertEquals. Converting to JSONObject isn't necessary.

To fetch data from an URL, you can use URL.getContent method:

final String data = new URL("...").getContent();
String expected = "{friends:[{id:123,name:\"Corby Page\"}"
        + ",{id:456,name:\"Solomon Duskis\"}]}";
JSONAssert.assertEquals(expected, data, false);

Solution 2

This can also be achieved with ModelAssert - https://github.com/webcompere/model-assert , which can take anything serializable to JSON as an input:

@Test
public void testGetFriends() throws JSONException {
    JSONObject data =  getRESTData("/friends/367.json");
    String expected = "{friends:[{id:123,name:\"Corby Page\"}"
            + ",{id:456,name:\"Solomon Duskis\"}]}";
    
    assertJson(data).isEqualTo(expected);
}

IIRC JSONObject is essentially a Map, so assertJson will convert it to the internal JsonNode format it uses for comparison.

Share:
13,686
Admin
Author by

Admin

Updated on June 04, 2022

Comments

  • Admin
    Admin almost 2 years

    I'm relatively new to Java and I'm asking to write test of JSON response server. I found JSONassert very useful but I didn't succeed to write the method getRESTData.

    Anybody can help please?

    @Test
    public void testGetFriends() throws JSONException {
        JSONObject data =  getRESTData("/friends/367.json");
        String expected = "{friends:[{id:123,name:\"Corby Page\"}"
                + ",{id:456,name:\"Solomon Duskis\"}]}";
        JSONAssert.assertEquals(expected, data, false);
    }