【问题标题】:Fluent Assertions ShouldAllBeEquivalentTo流利的断言应该AllBeEquivalentTo
【发布时间】: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);

如何在比较中排除属性的同时比较集合?

【问题讨论】:

    标签: c# unit-testing fluent-assertions


    【解决方案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/…
    猜你喜欢
    • 2023-03-27
    • 2020-02-08
    • 2014-07-27
    • 2018-06-25
    • 2021-01-18
    • 2020-08-16
    • 2016-04-11
    • 2015-09-23
    • 2016-11-08
    相关资源
    最近更新 更多