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

FluentAssertions等价校验:忽略源端独有属性,目标端独有属性需报错

你当前使用的ExcludingMissingMembers配置仅会忽略预期对象(此处为X)有而实际对象(此处为Y)没有的成员,刚好符合你忽略X.D的需求,但FluentAssertions默认会自动跳过实际对象(Y)中找不到匹配源的属性,所以Y.A不会触发报错。
要实现目标端独有属性必须报错的规则,只需在配置中追加CheckAllMembersAreMatched()即可,同时需要显式配置X.AA到Y.A的映射关系——如果没有配置该映射,Y.A会因为找不到匹配的源属性直接触发报错,刚好符合你“属性未映射就报错”的要求。
完整可运行代码示例:

Y.Should().BeEquivalentTo(X, options => options
    // 配置X.AA到Y.A的属性映射,已提前配置过全局映射可删除该行
    .WithMapping<X, Y>(src => src.AA, dest => dest.A)
    // 忽略源端独有的、目标端不存在的属性,适配X.D的校验规则
    .ExcludingMissingMembers()
    // 强制要求目标端所有属性都必须匹配到源端属性,未匹配直接报错
    .CheckAllMembersAreMatched()
);

如果你使用的FluentAssertions版本低于6.0,不支持CheckAllMembersAreMatched方法,可以用手动校验属性列表的方式替代:

// 先校验Y的公共属性没有超出预期范围
typeof(Y).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
    .Select(p => p.Name)
    .Should()
    .BeEquivalentTo(new[] { "A", "B", "C" });

// 再校验属性值等价性
Y.Should().BeEquivalentTo(X, options => options
    .WithMapping<X, Y>(src => src.AA, dest => dest.A)
    .ExcludingMissingMembers());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:03