Речь в этой небольшой статье пойдёт про библиотеку skyscreamer JSONAssert., которая позволяет сравнивать ожидаемый JSON и полученный на самом деле при выполнении теста.
При сравнении JSON в Unit-тестах зачастую требуется игнорировать значения определённых полей. Например, это могут быть поля с GUID запроса или ответа, которые каждый раз генерируются заново и не несут особо полезной информации для нас.
Пример простого сравнения двух строк, содержащих JSON:
1 2 3 4 5 |
String expectedJsonString = ... // some json String actualJsonString = ... // some json JSONAssert.assertEquals(expectedJsonString, actualJsonString, false); |
Но зачастую нам нужно игнорировать некоторые поля при сравнении. Например, будем игнорировать поле request_id. Для этого нам нужно будет написать специальный класс обработки этого поля, который будет всегда возвращать нам, что значения этого поля равны.
1 2 3 4 5 6 7 8 |
import org.skyscreamer.jsonassert.ValueMatcher; public class HamcrestIgnoreValueMatcher implements ValueMatcher { @Override public boolean equal(Object o, Object t1) { return true; } } |
Теперь мы можем его исользовать с помощью CustomComparator:
1 2 3 4 5 |
JSONAssert.assertEquals(deferredUpdateDriverEvent, deferredUpdateEventToDriver.value(), new CustomComparator(JSONCompareMode.LENIENT, new Customization("request_id", new HamcrestIgnoreValueMatcher()), ) ); |