当 属性 有 NullValueHandling.Ignore 时断言

Assert when property has NullValueHandling.Ignore

在我的端点的响应中,如果 属性 的值为 null ,我需要省略它,所以我用 [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 标签标记了道具。

因此,使用 属性 上的标签,此 属性 不会成为响应有效负载的一部分,而这正是我想要 check/assert 在我的单元测试中, 属性 没有出现在我的 JSON 回复中。

我使用 FluentAssertions 作为断言框架,使用 AutoFixture 作为模拟生成器。

为什么不直接断言 HTTP 请求对原始 JSON 的响应?或者使用类似将 JSON 反序列化为结构由匿名类型定义的对象的方法。请参阅 this example 了解其工作原理。

我序列化端点的响应,将其解析为 JObject,然后验证令牌是否存在于 json 中,类似这样:

//Act
var result = await controller.Get(entity.Id);
var objectResult = result as OkObjectResult;
    
string serializeResponse = JsonConvert.SerializeObject(objectResult.Value,Formatting.Indented);                                                           
                
JObject responseJOject = JObject.Parse(serializeResponse);
                
//Assert: this is how I checked if the tokens were or not on the json
using (new AssertionScope())
{
  responseJOject.ContainsKey("myToken1").Should().BeFalse();
  responseJOject.ContainsKey("myToken2").Should().BeFalse();
}

这是基于@dennis-doomen 的响应,我采纳了他的建议,但采用了相反的方式,因为我想要的只是验证 属性 是否在响应负载内( json“正文”)。