流利的断言应该AllBeEquivalentTo
Posted
技术标签:
【中文标题】流利的断言应该AllBeEquivalentTo【英文标题】:Fluent Assertions ShouldAllBeEquivalentTo 【发布时间】:2018-12-01 10:11:48 【问题描述】:我不确定旧版本的 FluentAssertions 是否具有此功能,但我想将一个集合与另一个集合进行比较。我有一个这样的 dto:
public class UserDTO
public int Id get; set;
public string Username get; set;
我有两个想要比较的列表。
List<UserDTO> createdUsers = this.GetCreatedUser();
var expectedResults = this.dbContext.Users.Top(10);
我看到的最接近的应该是:
createdUsers.Should().AllBeEquivalentTo(expectedResults)
但是当我尝试通过排除项时,它似乎正在为我提供列表而不是实体本身的排除项。
我想比较这两个列表,不包括 Id 属性。我可以发誓有一个名为ShouldAllBeEquivalentTo
的函数接受了允许排除的选项,
createdUsers.ShouldAllBeEquivalentTo(expectedResults, o => o.Excluding(x => x.Id);
如何在比较中排除属性的同时比较集合?
【问题讨论】:
【参考方案1】:当涉及到集合和字典的排除时,文档建议如下
createdUsers.Should().BeEquivalentTo(expectedResults, options => options.Excluding(_ => _.Id));
引用自文档:
断言 OrderDto 的所有实例在结构上都等于单个对象:
orderDtos.Should().AllBeEquivalentTo(singleOrder);
参考Object graph comparison: Collections and Dictionaries
【讨论】:
有趣,我在上一家公司做这么旧的版本,肯定有一些变化,谢谢! 这是正确的。BeAllEquivalentTo
会将集合中的每个对象与同一个对象进行比较。
@johnny5 是的,在最新的主要版本 FA 中,ShouldBeEquivalentTo()
已移至 Should().BeEquivalentTo()
,如 Dennis 的博客所述:continuousimprover.com/2018/02/…以上是关于流利的断言应该AllBeEquivalentTo的主要内容,如果未能解决你的问题,请参考以下文章