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

set*_*bos 12 c# unit-testing xunit fluent-assertions

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

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)
    );
Run Code Online (Sandbox Code Playgroud)

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

Den*_*men 12

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

  • 是的,你可以做 actual.Should().BeEquivalentTo(expected); (2认同)
  • 在 FA 2.1 版本中,我们开始默认忽略项目的排序。你是这个意思吗? (2认同)

小智 5

为了断言一个对象集合等同于另一个对象集合,例如比较两个List<T>,您可以使用以下BeEquivalentTo()方法:

collection.Should().BeEquivalentTo(expectedResult);
Run Code Online (Sandbox Code Playgroud)

在这里,我使用 FluentAssertions nuget 包。