测试用例因 Null 断言而失败

时间:2021-04-29 02:01:37

标签: c# .net visual-studio unit-testing

"packages": [
           {
             "TriggerType": "sample",
             "StatusDescription": "",
             "Score": null,
             "Percentile": null,
             "Band": ""
           }
         ]

当我使用 JObject attachmentData = JObject.Parse(targetPayload); 解析这个 JSON 时

并执行单元测试。


Assert.AreEqual("", attachmentData.SelectToken("packages")[0].SelectToken("Score").ToString());

这很好用,但我想检查一下


Assert.AreEqual(null, attachmentData.SelectToken("packages")[0].SelectToken("Score").ToString());

or 
Assert.IsNull(attachmentData.SelectToken("packages")[0].SelectToken("Score").ToString());

出现以下错误。


Assert.AreEqual failed. Expected:<(null)>. Actual:<>

{"Assert.IsNull failed. "}


谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用 JTokenValueHasValue

var score = o.SelectToken("packages")[0].SelectToken("Score");

// score.Value is null
// score.IsValue is false

在您的测试中:

Assert.AreEqual(null, attachmentData.SelectToken("packages")[0].SelectToken("Score").Value);

请注意,如果没有 score(或 packages),这将抛出,您可能需要:

Assert.AreEqual(null, attachmentData.SelectToken("packages")?[0]?.SelectToken("Score")?.Value);

这取决于您要检查的内容:

  1. 分数存在但值为空
  2. 只是为了确保没有分数(所以 null 或不存在都可以
  3. 别的东西。

<块引用>

我想检查分数是否存在且值为空

var score = attachmentData.SelectToken("packages")?[0]?.SelectToken("Score");
Assert.IsNotNull(score);
Assert.IsFalse(score.Value<string>());

Assert.IsNotNull(score);
var v = (JValue)score;
Assert.IsNull(v.Value);