Fluent Assertion - 比较忽略空值的模型属性
Posted
技术标签:
【中文标题】Fluent Assertion - 比较忽略空值的模型属性【英文标题】:Fluent Assertion - compare models properties ignoring null values 【发布时间】: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 而忽略其他? 我应该使用排除方法吗?
【问题讨论】:
【参考方案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())
);
【讨论】:
以上是关于Fluent Assertion - 比较忽略空值的模型属性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Fluent Assertion 比较两个因属性而异的集合?
如何检查是不是可以在 Fluent Assertion 中使用 ContainValue 验证类型类的字典