Est-il possible d'utiliser Microsoft.VisualStudio.QualityTools.UnitTesting.CollectionAssert sur un IEnumerable ?

StackOverflow https://stackoverflow.com/questions/2058745

Question

J'ai un scénario de test où je veux vérifier si deux collections sont égales. J'ai trouvé la Microsoft.VisualStudio.QualityTools.UnitTesting.CollectionAssert de classe, mais il ne fonctionne que sur ICollection<T>. Depuis que je teste un référentiel pour Entity Framework, et ont donc besoin de comparer IObjectSet<T>s, ça ne va pas - IObjectSet<T> ne met pas en œuvre ICollection<T>

.

Est-il possible que je peux utiliser cette classe pour comparer les collecitons, ou dois-je créer ma propre mise en œuvre? (Et pourquoi diable ne pas l'équipe Microsoft faire le travail en classe avec IEnumerable<T> à la place, car c'est la « interface de base » pour les collections?)

EDIT: Ceci est mon code de test:

// Arrange
var fakeContext = new FakeObjectContext();
var dummies = fakeContext.Dummies;
var repo = new EFRepository<DummyEntity>(fakeContext);

// Act
var result = repo.GetAll();

// Assert
Assert.IsNotNull(result, NullErrorMessage(MethodName("GetAll")));
Assert.IsInstanceOfType(result, typeof(IEnumerable<DummyEntity>), IncorrectTypeMessage(MethodName("GetAll"), typeof(IEnumerable<DummyEntity>)));
CollectionAssert.AreEqual(dummies.ToList(), result.ToList());

L'appel CollectionAssert.AreEqual sur la dernière ligne échoue, indiquant que les éléments à l'index 0 ne sont pas égaux. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Une option effronté (info pas tout à fait aussi bien que) est d'affirmer que le rendement des expected.SequenceEqual(actual) true.

Vous pouvez écrire une méthode d'emballage qui oblige une collection (.ToList() chaque)? Mais pour être honnête, vous pourriez tout aussi bien appeler .ToList() dans le code de test unitaire:

CollectionAssert.AreEqual(expected.ToList(), actual.ToList()); // but tidier...

Autres conseils

Si vous comparez résultat que vous ENSEMBLES pouvez utiliser CollectionAssert.AreEquivalent qui ne tiendra pas compte de l'ordre. Vous devez également vous assurer que vous avez mis en œuvre Equals sur le type d'éléments que vous comparez.

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