【问题标题】:Compare contents of System.Text.JsonDocument C# in unit test在单元测试中比较 System.Text.JsonDocument C# 的内容
【发布时间】:2022-01-14 03:09:04
【问题描述】:

我觉得我在这里服用了疯狂的药丸......但是我如何比较两个 JsonDocuments(或 JsonElements 或你有什么)的 JSON 相等性,即具有相同值的相同键?

为了限制范围,在单元测试中执行这种比较的能力已经足够了。

我有一个单元测试,我想将返回 JsonDocument 的函数的结果与某个预期值进行比较。不起作用的事情包括使用 FluentAssertions.Json(因为我的类型不是 JObject),以及比较 GetRawText 的值,因为我不关心空格。

我想我可以写出字符串并重新序列化它们或其他东西,但老实说,这感觉像是一种黑客行为,我一定做错了什么。

我了解比较它们的业务逻辑,我看过其他问题,例如thisthis。第一个更符合我想要的,这对于C#来说只是一个尴尬的结果...... 第二个根本不是我需要的。

【问题讨论】:

  • 仅在最令人失望的意义上。我没有任何困难理解执行这种比较所需的业务逻辑。我只是很难理解为什么 C# 社区认为 Homerolling 比较逻辑是可以接受的。
  • 非常不清楚你在问什么 - 显然你不是在寻找图书馆(离题),你声称本质上相同的“深度平等”问题绝对不是你想要的......请edit 澄清您希望看到的答案的问题。
  • @ChristophLütjen 谢谢,这看起来很有希望,我很感激
  • 没试过,但是你能不能在JsonDocumentGetHash() 然后比较哈希?

标签: c# json


【解决方案1】:

感谢@ChristophLütjen 在this issue 中确定我需要的修复程序

给定两个JsonDocuments,我可以像这样使用 FluentAssertions 来比较它们:

Doc1.RootElement.Should().BeEquivalentTo(Doc2.RootElement, opt => opt.ComparingByMembers<JsonElement>());

我仍然很困惑,对于一般情况,没有更直接的比较方法,但由于我直接使用的是单元测试,所以我对这个结果很满意。

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2010-09-19
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2012-06-03
    相关资源
    最近更新 更多