FluentAssertions对包含null的集合应为.Equal

本文关键字:Equal 集合 包含 null FluentAssertions | 更新日期: 2023-09-27 18:21:20

当我尝试比较两个具有null 的集合时,FluentAssessments似乎失败,出现NullReferece异常

    [Test]
    public void DeepWithNulls()
    {
        var l1 = new List<string> { "aaa", null };
        var l2 = new List<string> { "aaa", null };
        l1.Should().Equal(l2);
    }

比较在不包含null的集合上按预期工作。

FluentAssertions对包含null的集合应为.Equal

之所以会发生这种情况,是因为在集合比较逻辑Fluent Assertion的深处使用了以下代码

 for (int index = 0; index < expectedItems.Length; index++)
            {
                verification.ForCondition((index < actualItems.Length) && actualItems[index].Equals(expectedItems[index]))
                    .FailWith("Expected " + Verification.SubjectNameOr("collection") +
                        " to be equal to {0}{reason}, but {1} differs at index {2}.", expected, Subject, index);
            }

上面的代码expectedItemsactualItems是您的列表

现在想想当第二次迭代(下面的部分)执行时会发生什么?

actualItems[index].Equals(expectedItems[index])

因为actualItems[1]null,所以它抛出空引用异常