【发布时间】:2019-03-09 18:43:03
【问题描述】:
我有两个 Json 对象如下需要比较。我正在使用 Newtonsoft 库进行 Json 解析。
string InstanceExpected = jsonExpected;
string InstanceActual = jsonActual;
var InstanceObjExpected = JObject.Parse(InstanceExpected);
var InstanceObjActual = JObject.Parse(InstanceActual);
我正在使用 Fluent Assertions 来比较它。但问题是 Fluent 断言仅在属性计数/名称不匹配时才会失败。如果 json 值不同,则通过。当价值观不同时,我需要失败。
InstanceObjActual.Should().BeEquivalentTo(InstanceObjExpected);
例如,我将实际和预期的 json 进行比较,如下所示。而使用上面的比较方式使它们通过这是错误的。
{
"Name": "20181004164456",
"objectId": "4ea9b00b-d601-44af-a990-3034af18fdb1%>"
}
{
"Name": "AAAAAAAAAAAA",
"objectId": "4ea9b00b-d601-44af-a990-3034af18fdb1%>"
}
【问题讨论】:
-
为什么不比较字符串而不是比较json对象呢?
-
不能进行简单的字符串比较吗?
jsonExpected == jsonActual. -
JSON 实际上不是一个字符串,所以上面的 cmets 是无关紧要的。
{ "id": "5" }应该与{ "id" : "5" }相同。所以你不能使用字符串比较器来比较 JSON。 -
...除非 JSON 总是由相同的过程创建并且项目是有序的。
-
@JessedeWit ...我不提倡字符串比较,因为它很讨厌,但是,如果通过保证属性排序的序列化程序往返,它可能会起作用。
标签: c# unit-testing json.net assertion fluent-assertions