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

FluentAssertions如何比对属性名称不同的对象的等价性?

FluentAssertions异名属性等价比对实现方案

单个零散异名属性匹配

针对单独的属性名差异场景,直接使用内置的WithMapping方法配置映射关系即可,示例如下:

// 替换YType、XType为对应对象的实际类型
x.Should().BeEquivalentTo(y, options => options
    .WithMapping<YType, XType>(
        y => y.PropertyWithName, 
        x => x.PropertyWithVerySimilarName
    ));

如果需要配置多组异名属性匹配,链式调用WithMapping方法即可。

批量统一规则的异名属性匹配

如果两类对象的属性命名存在统一的规则差异(例如前缀、后缀、大小写差异),可以通过WithNameMatching配置全局名称匹配逻辑,不用逐个配置映射:

x.Should().BeEquivalentTo(y, options => options
    .WithNameMatching((actualMemberName, expectedMemberName) => 
    {
        // 此处示例逻辑为忽略大小写、去掉名称中的Dto后缀后匹配,可按需修改
        var processedExpectedName = expectedMemberName.Replace("Dto", string.Empty);
        return actualMemberName.Equals(processedExpectedName, StringComparison.OrdinalIgnoreCase);
    }));

补充说明

  • 单属性映射的WithMapping规则优先级高于全局的WithNameMatching规则,冲突时优先触发前者
  • 配置规则后其余未手动指定的属性仍会按照FluentAssertions默认的等价比对规则执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:45:06