流利的断言应该AllBeEquivalentTo

joh*_*y 5 4 c# unit-testing fluent-assertions

我不确定旧版本的 FluentAssertions 是否有这个,但我想将一个集合与另一个集合进行比较。我有一个像这样的dto:

public class UserDTO
{
    public int Id { get; set; }
    public string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有两个我想比较的列表。

 List<UserDTO> createdUsers = this.GetCreatedUser();
 var expectedResults = this.dbContext.Users.Top(10);
Run Code Online (Sandbox Code Playgroud)

我看到的最接近的应该都是等价的:

 createdUsers.Should().AllBeEquivalentTo(expectedResults)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试通过排除项时,它似乎在为我提供列表的排除项,而不是实体本身。

我想比较其中的两个列表,不包括 Id 属性。我可以发誓有一个名为的函数ShouldAllBeEquivalentTo,它接受允许排除的选项,

createdUsers.ShouldAllBeEquivalentTo(expectedResults, o => o.Excluding(x => x.Id);
Run Code Online (Sandbox Code Playgroud)

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

Nko*_*osi 5

当涉及到集合和字典的排除时,文档建议如下

createdUsers.Should().BeEquivalentTo(expectedResults, options => options.Excluding(_ => _.Id));
Run Code Online (Sandbox Code Playgroud)

引用自文档:

断言 OrderDto 的所有实例在结构上都等于单个对象:

orderDtos.Should().AllBeEquivalentTo(singleOrder);
Run Code Online (Sandbox Code Playgroud)

参考对象图比较:集合和字典

  • @johnny5 是的,在最新的 FA 主要版本中,“ShouldBeEquivalentTo()”已移至“Should().BeEquivalentTo()”,如 Dennis 的博客所述:https://www.continuousimprover.com/2018/02/fluent -assertions-50-best-unit-test.html#upgrading-tips (2认同)