如何使用流利的断言比较列表?

Posted

技术标签:

【中文标题】如何使用流利的断言比较列表?【英文标题】:How to compare lists using fluent-assertions? 【发布时间】:2013-03-08 22:14:21 【问题描述】:

我想比较一个对象列表,忽略列表中对象的顺序,只比较对象中的一些属性,目前我正在使用下面的代码来执行这个比较:

actual.Should().NotBeNull();
actual.Count.Should().Be(expected.Count);
//compare ignoring order
foreach (var exp in expected)
    actual.Should().Contain(act =>
        act.IndividualId.Equals(exp.IndividualId)
        && act.Email.Equals(exp.Email)
        && act.FirstName.Equals(exp.FirstName)
        && act.LastName.Equals(exp.LastName)
    );

然而,这似乎不太理想,因为当出现故障时,您不会打印出预期值。是否有使用流利断言执行此比较的内置机制?

【问题讨论】:

【参考方案1】:

现在不行。我们确实有 FA 2.0 的新 equivalency assertion 语法,但这也将验证对象是否以正确的顺序出现。对于 FA 2.1,我正在尝试支持这一点,但我不确定这是否可行。这基本上意味着它必须将集合项后面的整个对象图与集合中每个其他项的对象图进行比较。肯定会比较慢。

【讨论】:

是否可以说使用actual.Should().Contain(expected)比较两个List类型? 是的,你可以做actual.Should().BeEquivalentTo(expected); 为了灵活性,我们通常将每个对象序列化为 json,然后使用字符串比较,错误输出看起来不错,如果有人添加新属性,您永远不需要更新单元测试 @DennisDomen,目前的 FA 有什么新方法吗? 在 FA 2.1 版中,我们开始默认忽略项目的排序。是这个意思吗?

以上是关于如何使用流利的断言比较列表?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

如何使用流利的断言报告对象的名称

流利的断言应该AllBeEquivalentTo

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

流利的断言:大约比较两个数字集合