流利的断言应该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的主要内容,如果未能解决你的问题,请参考以下文章

流利的断言:字典应该是等效的,以排除字典值上的属性

为啥流利的断言失败但断言通过了枚举?

流利的断言;结合集合和对象图比较断言

如何使用流利的断言结合集合和属性断言?

OR 条件的流利断言

如何使用流利断言断言集合中的所有项目?