FluentAssertions Следует. Равно для коллекций, содержащих нули - PullRequest
5 голосов
/ 24 января 2012

Похоже, что FluentAssertions завершается ошибкой с исключением NullReferece, когда я пытаюсь сравнить две коллекции с нулями

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

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

Сравнение работает, как и ожидалось, для коллекций без нулей.

1 Ответ

4 голосов
/ 24 января 2012

Это происходит из-за того, что глубоко в логике сравнения коллекций 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);
            }

в приведенном выше коде expectedItems и actualItems ваши списки

Теперь подумайте, что произойдет во время второй итерации, когда (часть ниже) будет выполнена?

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

, так как actualItems[1] равно null, поэтому выдается исключение нулевой ссылки

...