我有一個測試場景,我想檢查兩個集合是否相等。我找到了類Microsoft.VisualStudio.QualityTools.UnitTesting.CollectionAssert
,但它只適用於ICollection<T>
。由於我正在測試Entity Framework的存儲庫,因此需要比較IObjectSet<T>
,這不會執行 - IObjectSet<T>
不會執行ICollection<T>
。是否可以在IEnumerable <T>上使用Microsoft.VisualStudio.QualityTools.UnitTesting.CollectionAssert?
有什麼辦法可以使用這個類來比較集合,還是我必須創建自己的實現? (爲什麼赫克沒有微軟團隊做出與IEnumerable<T>
類的工作,而不是,因爲這是「基地接口」對集合?)
編輯:這是我的測試代碼:
// 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());
最後一行的CollectionAssert.AreEqual
調用失敗,說明索引0處的元素不相等。我究竟做錯了什麼?
對我的所有集合執行'.ToList()'調用時,代碼將被編譯。但是,我無法撰寫我可以通過的測試 - 請參閱我在編輯中提供的代碼以查看我的帖子。 – 2010-01-16 13:35:35
原來在'DummyEntity'上實現'.Equals()'是個竅門。 – 2010-01-16 15:14:16