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

求Shouldly中与FluentAssertions.BeEquivalentTo等效的形状匹配断言方法

在Shouldly中实现与FluentAssertions.BeEquivalentTo等效的“形状匹配”断言

Shouldly的ShouldBeEquivalentTo默认会校验对象类型是否一致,所以不同类型但属性结构相同的ClassA和ClassB断言会失败。要实现只对比属性结构(即“形状”)不校验类型的效果,有两种实用方案:

  • 方案一:自定义ShouldBeEquivalentTo的配置
    直接用方法重载传入配置选项,关闭类型检查并指定按成员对比:

    classA.ShouldBeEquivalentTo(classB, options => options
        .IgnoreTypes() // 跳过类型匹配检查
        .ComparingByMembers<object>()); // 基于对象成员属性做等效对比
    

    这样配置后,Shouldly只会校验两个对象的属性名称、值是否一致,完全忽略类型差异,和FluentAssertions的BeEquivalentTo效果一致。

  • 方案二:先映射类型再断言
    如果项目里已经用了AutoMapper这类映射库,可以先把其中一个对象转换成另一个类型,再用默认断言:

    // 配置映射(如果没全局配置的话)
    var mapperConfig = new MapperConfiguration(cfg => cfg.CreateMap<ClassA, ClassB>());
    var mapper = mapperConfig.CreateMapper();
    
    // 转换后对比
    var convertedClassB = mapper.Map<ClassB>(classA);
    convertedClassB.ShouldBeEquivalentTo(classB);
    

    这种方式适合需要复用映射逻辑的场景,不过会多一步类型转换操作。

如果只是单纯要做“形状”对比,方案一更直接高效,不需要额外依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:02:35