Утверждение ответов JSON JArray Api

2

При подтверждении ответов JArray Json я получаю ошибку Assert.AreEqual failed. Expected:<Newtonsoft.Json.Linq.JArray[,] Newtonsoft.Json.Linq.JArray[,])>. Actual:<[ 1, 3] Assert.AreEqual failed. Expected:<Newtonsoft.Json.Linq.JArray[,] Newtonsoft.Json.Linq.JArray[,])>. Actual:<[ 1, 3]

Подскажите пожалуйста, где ошибка в коде? Я считаю, что проблема связана с классом ResponseReceived.


dynamic jsonResponse = JsonConvert.DeserializeObject(response.Content);
var responseTarget = jsonResponse.target;

//create a new response expected object
var responseExpected = new ResponseExpected();

//create a new post response received object
var responseReceived = new ResponseReceived();
responseReceived.Target = responseTarget;

  //Assert
Assert.AreEqual(responseExpected.Target, responseReceived.Target);


    public class ResponseReceived
    {
        public JArray Target{ get; set; }

    }

    public class ResponseExpected
    {
        public JArray[,] Target{ get; set; } = new JArray[1, 3];
    }
//post request json
var myObject = new { 
    target = new []{ 5, 5 } 
    }

ОБНОВЛЕНИЕ: проблема была решена, используя public JArray Target{ get; set; } = new JArray(new[] { 1, 3 }); public JArray Target{ get; set; } = new JArray(new[] { 1, 3 });

Однако, похоже, это работает с большинством тестовых сред, кроме MSTest. Как это можно решить с помощью MSTest?

  • 0
    Пожалуйста, отредактируйте и включите ввод JSON (или соответствующую часть)
  • 0
    @ Алекс Андреев ввод JSON добавлен
Теги:
arrays
mstest
post
web-api-testing
restsharp

2 ответа

1
Лучший ответ

Вы не можете ожидать, что один JArray будет равен массиву JArray Предположим, ваш json выглядит как

{
  "target": [
    5,
    5
  ]
}

Вы можете написать сборку как:

var input = "{\r\n  \"target\": [\r\n    5,\r\n    5\r\n  ]\r\n}";
dynamic json = JsonConvert.DeserializeObject(input);

var expected = new JArray(new[] {1, 3}); // not "new JArray[1, 3];"
var actual = json.target;

Assert.AreEqual(expected, actual);
  • 0
    Я получаю ошибку 'Assert.AreEqual failed. Expected:<[ 1, 3 ]>. Actual:<[ 1, 3 ]>. Я бы предпочел инициализировать значение массива в классах данных выше.
  • 0
    @CodeRocker Проверьте это онлайн . Если вы хотите использовать ваши классы, измените тип Target ResponseExpected на JArray и назначьте его, как в моем примере кода
Показать ещё 5 комментариев
0

Asset.AreEqual Проверяет, равны ли указанные объекты, и выдает исключение, если два объекта не равны. Если логические значения даже равны, если разные типы рассматриваются как не равные

Вы можете использовать JToken.DeepEquals(responseExpected.Target, responseReceived.Target) для сравнения

Ещё вопросы

Сообщество Overcoder
Наверх
Меню