【问题标题】:Fluent Assertion - compare models properties ignoring null valuesFluent Assertion - 比较忽略空值的模型属性
【发布时间】:2021-04-30 11:04:48
【问题描述】:

我正在处理的案例是 - 比较两个具有属性的对象但不包括具有空值的成员的最佳解决方案。

例如

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

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

objectA.Should().BeEquivalentTo(expectedObjectB);

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

【问题讨论】:

    标签: c# assert fluent-assertions


    【解决方案1】:

    解决此问题的一种方法是使用匿名对象。 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);
    
    

    【讨论】:

    • 但是null值的属性可以不一样,有时候是prop1,有时候是prop2,甚至有时候两者都是
    • 这对我来说听起来很模糊。
    【解决方案2】:

    好的,我通过自定义 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())
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-05
      • 2018-11-09
      • 2022-01-14
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      相关资源
      最近更新 更多