You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core快照单元测试:Verify无法正常序列化Newtonsoft.Json JObject

如何让Verify正确序列化Newtonsoft.Json JObject?

我使用Verify(版本19.6.0)编写快照单元测试测试复杂对象时,Newtonsoft.Json JObject属性被序列化为空数组,需要解决这个序列化问题。

相关代码

  • 生产项目代码:
public class TestController : ControllerBase
{
    public async Task<ActionResult> ReturnStubResult()
    {
        return Ok( 
        new {
            Property1 = "value1",
            Property2 = 5,
            Property3 = new JObject()
            {
                ["ChildProperty1"] = "child value 1",
                ["ChildProperty2"] = 2
            }
        });
    }
}
  • 单元测试项目(引用Verify.Xunit库)代码:
[Fact]
public async Task TestSnapshotSerialization()
{
    var controller = new TestController();

    var actionResult = await controller.ReturnStubResult();

    var okObjectResult = actionResult.Should().BeOfType<OkObjectResult>().Which;

    await Verifier.Verify(okObjectResult.Value);
}

当前错误的序列化输出

{
  "Property1": "value1",
  "Property2": 5,
  "Property3": {
    "ChildProperty1": [],
    "ChildProperty2": []
  }
}

解决方案

Verify默认采用System.Text.Json序列化,而JObject是Newtonsoft.Json专属类型,System.Text.Json无法正确解析其内部结构,导致序列化异常。按以下步骤解决:

  1. 安装Verify.NewtonsoftJson扩展包
    在单元测试项目中安装NuGet包Verify.NewtonsoftJson,该扩展用于让Verify兼容Newtonsoft.Json的各类类型。

  2. 配置Verify使用NewtonsoftJson序列化
    两种配置方式可选:

    • 全局配置(在测试项目启动时设置,例如AssemblyInfo.cs或专用启动类):
      [ModuleInitializer]
      public static void Initialize()
      {
          VerifyNewtonsoftJson.Initialize();
      }
      
    • 单测试配置(仅对当前测试生效):
      修改测试代码,在Verify调用前添加UseNewtonsoftJson():
      await Verifier.Verify(okObjectResult.Value)
                    .UseNewtonsoftJson();
      
  3. 验证正确结果
    重新运行测试,JObject会被正确序列化:

    {
      "Property1": "value1",
      "Property2": 5,
      "Property3": {
        "ChildProperty1": "child value 1",
        "ChildProperty2": 2
      }
    }
    

内容的提问来源于stack exchange,提问作者Mykola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:25:26