5

当我尝试将两个集合与空值进行比较时,FluentAssertions 似乎因 NullReference 异常而失败

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

        l1.Should().Equal(l2);
    }

比较在没有空值的集合上按预期工作。

4

1 回答 1

4

发生这种情况是因为在集合比较逻辑 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抛出空引用异常

于 2012-01-24T16:04:03.117 回答