Как comapre 2 JSON фильтруется с несколькими путями JSON с одним сравнением? - PullRequest
0 голосов
/ 02 мая 2019

Есть 2 json, есть несколько путей, которые необходимо применить к обоим json. Затем эти jsons должны сравниваться с помощью некоторого утверждения в тесте. Идеальное решение должно быть:

Stirng actualJson - ....
Stirng expectedJson - ....
Stirng actualJsonFiltered - filter(actualJson, lisofJsonPath);
Stirng expectedJsonFiltered - filter(expectedJson, lisofJsonPath);

JSONAssert.assertEquals(actualJsonFiltered, expectedJsonFiltered);

Что является не решением: 1. Любой такой код:

for(String p: lisofJsonPath) {
    assertEquals(JsonPath.read(actualJson, p), JsonPath.read(expectedJson , p);
}

Необходимо отфильтровать jsons и показать / потерпеть неудачу со всем существующим путем Покажите ошибку, что несколько путей не совпадают. Не одно за другим совпадение пути json.

  1. org.assertj.core.api.SoftAssertions - также не является решением, так как из сообщения трудно понять, какие активы потерпели неудачу.

  2. harcrest allOf / anyOf также не является решением, так как он дает сбой при первой согласованной сборке, не объединяя их.

P.S. Любые предложения по визуализации json diff приветствуются. Идеальный способ выглядит как это . (но это в javascript)

1 Ответ

0 голосов
/ 02 мая 2019

Во-первых, принять следующее:

  1. JSON - это неупорядоченная коллекция пар ключ-значение.
  2. Трудно сравнивать неупорядоченную коллекцию чего-либо.
  3. Если вы заказываете пары ключ-значение (отсортированные по ключу) и представляете значение JSON в виде строки (например: "{\" keyA \ ": \" blam \ ", \" keyB \ ": \ "kapow \"} ") вы можете сравнить значения JSON, используя сравнение строк.

Я назову отсортированную форму JSON «канонической формой JSON».

Как только вы примете вышесказанное как истинное и / или реальное, это станет решением вашей проблемы:

  1. Создайте инструмент (возможно, один класс), который принимает JSON и выводит каноническую форму JSON (это нетривиальная часть этого решения):
  2. Получите каноническую форму JSON для обоих ваших значений JSON.
  3. Сравните канонические формы JSON, используя assertEquals.
...