FluentAssertions 排除重复配置
FluentAssertions factor out repeated config
我有这样的单元测试代码:
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
option => option
.Excluding(x => x.Id)
.Excluding(x => x.Status)
.Excluding(x => x.Stale)
.Excluding(x => x.Body)
.Excluding(x => x.CreatedBy)
.Excluding(x => x.UpdatedBy),
"because version3 is version2 updated");
然后再
// version4 should be a copy of version3 with some differences
version4.Data.ShouldBeEquivalentTo(version3,
option => option
.Excluding(x => x.Id)
.Excluding(x => x.Status)
.Excluding(x => x.Stale)
.Excluding(x => x.Body)
.Excluding(x => x.CreatedBy)
.Excluding(x => x.UpdatedBy),
"because version4 is version3 updated");
如何分解 option
?
我想做这样的东西:
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
option => baseOption,
"because version3 is version2 updated");
甚至可能是这样:
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
option => baseOption
.Excluding(x => x.OtherProperty),
"because version3 is version2 updated");
在外部声明选项委托为基础
Func<FluentAssertions.Equivalency.EquivalencyAssertionOptions<MyDataType>,
FluentAssertions.Equivalency.EquivalencyAssertionOptions<MyDataType>>
baseOption = option => option
.Excluding(x => x.Id)
.Excluding(x => x.Status);
并将其与断言一起使用
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2, baseOption,
"because version3 is version2 updated");
对于需要在基础上构建的其他断言,您必须调用委托并附加其他选项
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
option => baseOption(option)
.Excluding(x => x.OtherProperty),
"because version3 is version2 updated");
您应该注意到,当前使用的语法在较新版本的框架中已被弃用。
version3.Should().BeEquivalentTo(version2, baseOption,
"because version3 is version2 updated");
或者切换到 v5,这样你就可以将你的被测对象与匿名类型进行比较,在匿名类型中你只定义你关心的特定测试的属性。
我有这样的单元测试代码:
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
option => option
.Excluding(x => x.Id)
.Excluding(x => x.Status)
.Excluding(x => x.Stale)
.Excluding(x => x.Body)
.Excluding(x => x.CreatedBy)
.Excluding(x => x.UpdatedBy),
"because version3 is version2 updated");
然后再
// version4 should be a copy of version3 with some differences
version4.Data.ShouldBeEquivalentTo(version3,
option => option
.Excluding(x => x.Id)
.Excluding(x => x.Status)
.Excluding(x => x.Stale)
.Excluding(x => x.Body)
.Excluding(x => x.CreatedBy)
.Excluding(x => x.UpdatedBy),
"because version4 is version3 updated");
如何分解 option
?
我想做这样的东西:
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
option => baseOption,
"because version3 is version2 updated");
甚至可能是这样:
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
option => baseOption
.Excluding(x => x.OtherProperty),
"because version3 is version2 updated");
在外部声明选项委托为基础
Func<FluentAssertions.Equivalency.EquivalencyAssertionOptions<MyDataType>,
FluentAssertions.Equivalency.EquivalencyAssertionOptions<MyDataType>>
baseOption = option => option
.Excluding(x => x.Id)
.Excluding(x => x.Status);
并将其与断言一起使用
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2, baseOption,
"because version3 is version2 updated");
对于需要在基础上构建的其他断言,您必须调用委托并附加其他选项
// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
option => baseOption(option)
.Excluding(x => x.OtherProperty),
"because version3 is version2 updated");
您应该注意到,当前使用的语法在较新版本的框架中已被弃用。
version3.Should().BeEquivalentTo(version2, baseOption,
"because version3 is version2 updated");
或者切换到 v5,这样你就可以将你的被测对象与匿名类型进行比较,在匿名类型中你只定义你关心的特定测试的属性。