как сказать assertJsonEquals игнорировать одно поле при сравнении - PullRequest
0 голосов
/ 04 мая 2018

Я использую assertJsonEquals из JsonUnit

Я делаю в своем коде следующее:

assertJsonEquals(resource("ExpecedResponse.json"),
                         ActualResponse, when(IGNORING_ARRAY_ORDER));

ActualResponse имеет ответ от HTTP POST.

ExpectedResponse.json - это файл json с некоторыми полями, например, такими как:

{
  "columnNames": [
    "date",
    "signalType",
    "userId",
  ],
  "values": [
    [
      222555888,
      "OUT",
      "000-000-111-444"
    ],
    [
      333666999,
      "IN",
      "000-000-222-333"
    ],
  ],
  "lastUpdatedTimestamp": "2018-01-26T00:00:00Z"
}

Я сравниваю два ответа с assertJsonEquals.

Мой вопрос: как мне сказать, чтобы он игнорировал проверку поля lastUpdatedTimestamp, но проверял все остальное с помощью assertJsonEquals или любой другой библиотеки, которую вы можете порекомендовать?!

Если я удаляю lastUpdatedTimestamp из ExpectedResponse.json, то он жалуется, что он отсутствует!

Буду признателен за вашу помощь, спасибо.

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Как указано в документации :

assertJsonEquals(
   "{\"root\":{\"test\":1, \"ignored\": 2}}", 
   "{\"root\":{\"test\":1, \"ignored\": 1}}", 
   whenIgnoringPaths("root.ignored")
);
0 голосов
/ 04 мая 2018

Вы можете использовать библиотеку https://github.com/skyscreamer/JSONassert, которая имеет метод assert, позволяющий настройку.

Вот пример теста, который проходит (и игнорирует значение поля time)

  @Test
  public void test() throws JSONException {
    JSONAssert.assertEquals("{x: 1, time:123}",
                            "{x: 1, time:234}",
                            new CustomComparator(
                              JSONCompareMode.STRICT,
                              Customization.customization("time", // json path you want to customize
                                                          new ValueMatcher() {
                                @Override public boolean equal(Object o1, Object o2) {
                                  return true; // in your case just ignore the values and return true
                                }
                              }))
    );
  }

Вот ссылка на javadoc метода assertEquals, который я использую в примере: http://jsonassert.skyscreamer.org/apidocs/org/skyscreamer/jsonassert/JSONAssert.html#assertEquals-java.lang.String-java.lang.String-org.skyscreamer.jsonassert.comparator.JSONComparator-

...