求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
相关产品推荐
相关产品推荐

