Member 14779968 Ответов: 1

Как утверждать, что сервер API содержит свойство json и значения, которые совпадают с сравниваемой моделью?


Я пытаюсь проверить, содержит ли API то же свойство и значение модели, с которым она сравнивается. У меня есть метод проверки, который позволяет мне десериализовать ответ с сервера. У меня также есть DTO, который является моделью. Затем, используя Рефекцию, я получаю свойство и значения. Но в строке Assert он терпит неудачу, потому что сервер API возвращает массив, и в этом Arrray содержит модель, с которой я пытаюсь ее сравнить. Я знаю, что могу использовать Assert.equal, потому что сервер может возвращать и другую информацию.. Как я могу использовать contains или какой-то другой способ проверить это?

public class PropertiesValidator<TModel> 
    {
        public static void Validate(IRestResponse response, TModel modelObj, params string[] propertiesNotToCompare)
        {
            var content = response.Content;
            object acutalObjects = JsonConvert.DeserializeObject(content);

            PropertyInfo[] properties = acutalObjects.GetType().GetProperties();
            foreach (PropertyInfo currentRealProperty in properties)
            {
                if (!propertiesNotToCompare.Contains(currentRealProperty.Name))
                {
                    PropertyInfo currentExpectedProperty = modelObj.GetType().GetProperty(currentRealProperty.Name);
                    string exceptionMessage =
                        string.Format("The property {0} of class {1} was not as expected.", currentRealProperty.Name, currentRealProperty.DeclaringType.Name);
                    Assert.AreEqual(currentExpectedProperty.GetValue(modelObj, null), currentRealProperty.GetValue(acutalObjects, null), exceptionMessage);
       
                }
                   
            }


        }
           
    }

//Here is my Model DTO class

  public class TagDTO
    {
        public long id { get; set; }
        public string name{ get; set; }
        public long type{ get; set; }
        public object query{ get; set; }
        public object parentId { get; set; }
        public object ownerId { get; set; }
        public object activeDirectoryId { get; set; }
        public bool hasChildren { get; set; }

        public static TagDTO actualObject()
        {
            return new TagDTO()
            {
                id = 5,
                name = "NotTag",
                type = 0,
                query = null,
                parentId = null,
                ownerId = null,
                activeDirectoryId = null,
                hasChildren = false
            };

        }

    }
//Here is the Json response from the Server.

[
  {
    "id": 5,
    "name": "NoTag",
    "type": 0,
    "query": null,
    "parentId": null,
    "ownerId": null,
    "activeDirectoryId": null,
    "hasChildren": false
  },
  {
    "id": 6,
    "name": "MyTag",
    "type": 0,
    "query": null,
    "parentId": null,
    "ownerId": "eccf46f3-348b-422e-8789-c163b5953b41",
    "activeDirectoryId": null,
    "hasChildren": false
  }
]


Что я уже пробовал:

Не уверен.. может быть, мы сможем использовать CollectionAssert.Содержит()

1 Ответов

Рейтинг:
2

#realJSOP

попытка десериализации Джейсона в объект модели вызовет исключение, если десериализация не может быть выполнена. Почему вы не можете просто поместить блок try/catch вокруг кода десериализации и позволить природе идти своим чередом?