J'ai un scénario de test où je veux vérifier si deux collections sont égales. J'ai trouvé la classe Microsoft.VisualStudio.QualityTools.UnitTesting.CollectionAssert
, mais cela ne fonctionne que sur ICollection<T>
. Puisque je suis en train de tester un référentiel pour Entity Framework, et que j'ai donc besoin de comparer IObjectSet<T>
, cela ne fonctionnera pas - IObjectSet<T>
n'implémente pas ICollection<T>
.Est-il possible d'utiliser Microsoft.VisualStudio.QualityTools.UnitTesting.CollectionAssert sur un IEnumerable <T>?
Est-il possible d'utiliser cette classe pour comparer les collecitons, ou dois-je créer ma propre implémentation? (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?
Avec '.ToList()' appelle sur toutes mes collections, le code compile. Cependant, je suis incapable d'écrire un test que je peux passer - voir le code que j'ai fourni dans une modification à mon message. –
Il s'avère que l'implémentation de '.Equals()' sur 'DummyEntity' a fait l'affaire. –