Question

FluentAssertions semble échouer avec l'exception NullReferece lorsque j'essaie de comparer deux collections avec des valeurs nulles

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

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

La comparaison fonctionne comme prévu sur les collections sans valeurs nulles.

Était-ce utile?

La solution

Cela est dû au fait qu'au fond de la logique de comparaison de collection, Fluent Assertion utilise le code suivant

 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);
            }

dans le code ci-dessus expectedItems et actualItems sont vos listes

Pensez maintenant à ce qui se passera lors de la deuxième itération lorsque (la partie ci-dessous) sera exécutée ?

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

comme actualItems[1] est null donc il lève une exception de référence nulle

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top