微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Fluent Assertion - 比较忽略空值的模型属性

如何解决Fluent Assertion - 比较忽略空值的模型属性

我正在处理的情况是 - 比较两个具有属性但排除具有空值的成员的对象的最佳解决方案是什么。

例如

objectA.prop1 = "value1";
objectA.prop2 = "value2";
objectA.prop3 = "value3";

expectedobjectB.prop1 = null;
expectedobjectB.prop2 = "value2";
expectedobjectB.prop3 = null;

objectA.Should().BeEquivalentTo(expectedobjectB);

它一对一地比较所有属性在这种情况下如何让它只比较 prop2 而忽略其他? 我应该使用排除方法吗?

解决方法

解决这个问题的一种方法是使用匿名对象。 BeEquivalentTo 在进行结构等效比较时,着眼于决定要考虑哪些属性的期望。

在这个

class MyClass
{
    string Prop1 { get; set; }
    string Prop2 { get; set; }
}

var subject = new MyClass
{
    Prop1 = "IrrelevantValue",Prop2 = "value2"
}


var expected = new
{
    Prop2 = "value2"
}

objectA.Should().BeEquivalentTo(expected);

,

好的,我通过自定义 IEquivalencyStep 获得了它。

public class NullValueExcludingComparer : IEquivalencyStep
    {
        public bool CanHandle(IEquivalencyValidationContext context,IEquivalencyAssertionOptions config)
        {
            return context.Expectation is null;
        }

        public bool Handle(IEquivalencyValidationContext context,IEquivalencyValidator parent,IEquivalencyAssertionOptions config)
        {
            return true;
        }
    }

并执行:

objectA.Should().BeEquivalentTo(expectedObjectB,options =>
    options.Using(new NullValueExcludingComparer())
);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。