adam bien's blog

Java EE 8 and JSON-P Simplify System Testing with JSON Patch 📎

JSON-P (JSR-374) from Java EE 8 comes with JSON Patch support, which is useful for system testing.

A JSON object returned from a HTTP endpoint can be easily compared to a local representation loaded from a file:


import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonPatch;
import javax.json.JsonReader;
import static org.junit.Assert.assertTrue;
import org.junit.Test;

public class JSONPDiffTest {

    @Test
    public void subtraction() {
        //e.g. server result
        JsonObject actual = Json.createObjectBuilder().
                add("a", 21).
                add("b", 1).
                build();

        try (JsonReader reader
                = Json.createReader(this.getClass().getResourceAsStream("/expected.json"))) {
            JsonObject expected = reader.readObject();
            JsonPatch diff = Json.createDiff(expected, actual);
            assertTrue(diff.toString(), diff.toJsonArray().isEmpty());
        }
    }
}    

The code above loads the file src/test/resources/expected.json with the content:


{
    "a": 21,
    "b": 2
}    

and compares it to the actual instance.

The result is:

java.lang.AssertionError: [{"op":"replace","path":"/b","value":1}]

JSON-P comes as a single maven dependency:


<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1.2</version>
</dependency>

See you at Java EE Workshops at MUC Airport, particularly at the Java EE CI/CD, Testing and Quality workshop