断言JSON JArray Api响应

问题描述 投票:2回答:1

在声明JArray Json响应时,我收到错误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 });解决

然而,除了MSTest之外,这似乎适用于大多数测试框架。如何通过MSTest解决这个问题?

c# json mstest restsharp web-api-testing
1个回答
1
投票

你不能指望单个JArray将等于JArray的数组假设你的json看起来类似于

{
  "target": [
    5,
    5
  ]
}

你可以写asserion像:

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);
© www.soinside.com 2019 - 2024. All rights reserved.