1

在 FluentAssertions 中,我可以使用AllProperties.But(obj => obj.property_I_do_not_want)来从比较断言中删除特定属性,当我知道要忽略的属性的名称时这很好,但在我的情况下,我只想忽略未初始化的属性。现在我愿意忽略一个等于 null 但如果有一个解决方案也排除了设置为默认值的原语,那将更加方便。

我开始尝试为PropertyAssertions该类编写一个扩展方法,但不知道如何创建一个IEnumerable<Expression<T>>包含Expression<T>用于访问每个属性以忽略以传递给该方法的But方法。

4

1 回答 1

3

如果您愿意尝试 2.0 测试版,您可以在新的 ShouldBeEquivalentTo() API 中使用 lambda 来排除某些属性,如下所示:

subject.ShouldBeEquivalentTo(expected, options =>
    options.Excluding(ctx => ctx.PropertyPath == "Level.Level.Text"));

如果需要,您甚至可以将其封装在自定义规则(实现 ISelectionRule 的类)中,如下所示:

subject.ShouldBeEquivalentTo(expected, options => 
    options.Using(new ExcludeUninitializedProperties()));

事实上,您甚至可以通过覆盖创建初始选项的工厂方法,将其设为特定类型的默认值:

EquivalencyAssertionOptions<TSubject>>.Default = () =>    
    EquivalencyAssertionOptions<TSubject>>.Default.Using(new ExcludeUninitializedProperties())
于 2012-09-01T11:49:23.983 回答