donc je le code suivant pour un test unitaire en utilisant NUnit 3 en C#:NUnit CollectionOrderedConstraint jette exception NullReference sur un champ readonly public non nul
var skills = new[]
{
new Skill("aaaa"), //parameter is Name
new Skill("kkkk"), //parameter is Name
new Skill("zzzz"), //parameter is Name
};
Assert.That(skills, Is.All.Not.Null);
var skillNames = skills.Select(s => s.Name);
Assert.That(skillNames, Is.All.Not.Null);
Assert.That(skillNames, Contains.Item("aaaa"));
Assert.That(skillNames, Contains.Item("kkkk"));
Assert.That(skillNames, Contains.Item("zzzz"));
Assert.That(skills, Is.Ordered.By("Name")); //Fails
Quand il arrive à l'affirmation Ordered
, il échoue et jette NullReferenceException: Object reference not set to an instance of an object.
à partir de CollectionOrderedConstraint.Matches(IEnumerable actual)
. Évidemment, les valeurs ne sont pas nulles. Ceci est vérifié par le passage de test suivant avec succès:
var skillNames = new[]
{
new Skill("aaaa").Name,
new Skill("kkkk").Name,
new Skill("zzzz").Name,
};
Assert.That(skillNames, Is.Ordered); //Passes
Je sais que la question n'est pas avec la contrainte By
, comme ce test passe aussi:
var characters = new[]
{
new Character { InterestingTrait = "aaaa" },
new Character { InterestingTrait = "kkkk" },
new Character { InterestingTrait = "zzzz" },
};
Assert.That(characters, Is.Ordered.By("InterestingTrait")); //Passes
La seule différence que je connaisse entre le défaut cas et les cas de passage est que dans le cas de l'échec, le champ que nous vérifions est un champ public readonly
. Pourquoi cela déclencherait-il une exception de référence nulle? Y at-il un problème connu avec ceci dans NUnit?
Pourriez-vous donner cela sous la forme d'un [mcve] afin que nous puissions le reproduire pour nous-mêmes facilement? –