FluentAssertions 对象图比较,包括 JSON 个对象
FluentAssertions object graph comparison including JSON objects
我有一个简单的 class,带有 属性 类型的对象,它可以包含 JSON 从不同来源构建的
public class SimpleClass
{
public string Id { get; set; }
public object JSONData { get; set; }
}
我正在使用 FluentAssertions 对象图比较,但这不起作用
private void Verify(SimpleClass actualOutput, SimpleClass expectedOutput)
{
actualOutput.Should().BeEquivalentTo(expectedOutput);
}
根据对象的来源,我看到了这样的消息
Expected member JSONData to be a
System.Collections.Generic.IDictionary`2[System.String,Newtonsoft.Json.Linq.JToken], but found a
System.Text.Json.JsonElement.
Expected member JSONData to be
System.String, but found
System.Text.Json.JsonElement.
当我将它们转换为字符串时,对象是相等的
private void Verify(SimpleClass actualOutput, SimpleClass expectedOutput)
{
actualOutput.JSONData.ToString().Should().Be(expectedOutput.JSONData.ToString());
}
我不想像那样比较单个属性,因为我需要比较一组 SimpleClass 实例。有什么方法可以使用对象图比较来完成这项工作吗?我可以配置 FluentAssertions 在比较期间进行字符串转换吗?
[Fact]
public void CompareJson()
{
var jsonText = @"{
""Element1"": 123,
""Element2"": ""text""
}";
var x1 = new SimpleClass { Id = "X", JSONData = jsonText };
var x2 = new SimpleClass { Id = "X", JSONData = JsonConvert.DeserializeObject(x1.JSONData.ToString()) };
x1.Should().BeEquivalentTo(
x2,
o => o.Using<object>(ctx => ctx.Subject.ToString().Should().Be(ctx.Expectation.ToString())).When(
info => info.SelectedMemberPath.EndsWith(nameof(SimpleClass.JSONData))));
}
我有一个简单的 class,带有 属性 类型的对象,它可以包含 JSON 从不同来源构建的
public class SimpleClass
{
public string Id { get; set; }
public object JSONData { get; set; }
}
我正在使用 FluentAssertions 对象图比较,但这不起作用
private void Verify(SimpleClass actualOutput, SimpleClass expectedOutput)
{
actualOutput.Should().BeEquivalentTo(expectedOutput);
}
根据对象的来源,我看到了这样的消息
Expected member JSONData to be a
System.Collections.Generic.IDictionary`2[System.String,Newtonsoft.Json.Linq.JToken], but found a
System.Text.Json.JsonElement.
Expected member JSONData to be
System.String, but found
System.Text.Json.JsonElement.
当我将它们转换为字符串时,对象是相等的
private void Verify(SimpleClass actualOutput, SimpleClass expectedOutput)
{
actualOutput.JSONData.ToString().Should().Be(expectedOutput.JSONData.ToString());
}
我不想像那样比较单个属性,因为我需要比较一组 SimpleClass 实例。有什么方法可以使用对象图比较来完成这项工作吗?我可以配置 FluentAssertions 在比较期间进行字符串转换吗?
[Fact]
public void CompareJson()
{
var jsonText = @"{
""Element1"": 123,
""Element2"": ""text""
}";
var x1 = new SimpleClass { Id = "X", JSONData = jsonText };
var x2 = new SimpleClass { Id = "X", JSONData = JsonConvert.DeserializeObject(x1.JSONData.ToString()) };
x1.Should().BeEquivalentTo(
x2,
o => o.Using<object>(ctx => ctx.Subject.ToString().Should().Be(ctx.Expectation.ToString())).When(
info => info.SelectedMemberPath.EndsWith(nameof(SimpleClass.JSONData))));
}