Утверждаем, что один JSON, похожий на список карт, содержит другой JSON

У меня есть тест, который пытается утверждать, если объект acutal json из вызова REST API содержит ожидаемый JSON, который я жестко закодировал.
Мой фактический JSON, который выглядит как

{
    "data": [{
        "requiredness": "required",
        "multi_value": false,
        "editable": true,
        "name": "name__v",
        "type": "String",
        "max_length": 50
    }, {
        "requiredness": "required",
        "multi_value": false,
        "editable": true,
        "name": "label__v",
        "type": "String",
        "max_length": 100
    }, {
        "requiredness": "required",
        "multi_value": false,
        "editable": true,
        "name": "active__v",
        "type": "Boolean"
    }, {
        "requiredness": "required",
        "component": "Doctype",
        "multi_value": false,
        "editable": true,
        "name": "type__v",
        "type": "Component"
    }, {
        "requiredness": "conditional",
        "component": "Doctype",
        "multi_value": false,
        "editable": true,
        "name": "subtype__v",
        "type": "Component"
    }, {
        "requiredness": "optional",
        "component": "Doctype",
        "multi_value": false,
        "editable": true,
        "name": "classification__v",
        "type": "Component"
    }, {
        "requiredness": "optional",
        "multi_value": false,
        "editable": true,
        "name": "filing_model__v",
        "type": "Object"
    }],
    "responseStatus": "SUCCESS"
}

И я хочу утверждать, что следующий ожидаемый JSON содержит только одну карту из списка карт:

{  
   "data":[  
      {  
         "requiredness":"required",
         "multi_value":false,
         "editable":true,
         "name":"name__v",
         "type":"String",
         "max_length":50
      }
   ],
   "responseStatus":"SUCCESS"
}

Это мой тест

public void test(){
    JSONObject actualjson = callAPI(endpoint);
    JSONObject expectedjson =new JSONObject(expectedOutput);
    Assert.assertThat(actualjson.toString(),CoreMatchers.containsString(ExpectedjsonObj.toString()));
   } 

Я получаю исключение из-за пробелов:

Expected: a string containing "{"data":[{"requiredness":"required","multi_value":false,"editable":true,"name":"name__v","type":"String","max_length":50}],"responseStatus":"SUCCESS"}"

но то, что было получено, было

"{"data":[{"requiredness":"required","multi_value":false,"editable":true,"name":"name__v","type":"String","max_length":50},{"requiredness":"required","multi_value":false,

Как лучше всего утверждать, что список карт в моем фактическом JSON содержит мои ожидаемые карты( может быть список тоже)

1 ответ

  1. Так как вы тестируете выходные данные вызова REST API, и порядок не обязательно гарантирован в выходных данных, решение является именно то, что вы выразили, что вы не хотите делать: утверждать существование каждого элемента в JSONObject. К счастью, для этого можно использовать библиотеку JSONAssert.