[英]How To Properly Unit-Test CRUD Operations on a Repository?
意識到這可能聽起來像一個廣泛的問題 - 所以讓我澄清一下。 我有一個通過接口公開的存儲庫,有兩個具體的實現 - 一個MockRepository和一個EntityFrameworkRepository 。
現在,我有一個Unit-Test項目,通過[TestInitialize]
的一行,可以對任一存儲庫運行所有測試。
我的問題基本上是“我該如何編寫測試”。
這就是我所擁有的:
C reate
// Arrange.
var foo = new Foo { .. };
// Act
Repository.Add(foo);
UnitOfWork.Commit();
// Assert
Assert.IsTrue(foo.Id > 0);
R etrieve
// Arrange.
var fooToGet = 1;
// Act
var foo = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNotNull(foo);
Assert.AreEqual(foo.Id, fooToGet);
üPDATE
// Arrange.
var fooToGet = 1;
var nameToChangeFooTo = "FooBar";
// Act
var foo = Repository.FindSingle(fooToGet);
foo.Name = nameToChangeFooTo;
UnitOfWork.Commit();
var fooRetrievedAgain = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNotNull(foo);
Assert.AreEqual(fooRetrievedAgain.Id, fooToGet);
Assert.AreEqual(fooRetrievedAgain.Name, nameToChangeFooTo);
D elete
// Arrange.
var fooToGet = 1;
// Act
var foo = Repository.FindSingle(fooToGet);
Repository.Remove(foo);
UnitOfWork.Commit();
var fooRetrievedAgain = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNull(fooRetrievedAgain);
它的工作好 ,同時為模擬和EF庫,但我的主要問題是C(創建)。 我不確定如何測試我的存儲庫上的添加操作。 我在做什么感覺不對 。
它傳遞給EF Repository,但為了讓它通過我的Mock Repository,我不得不使用反射來更新內存中的ID(討厭)。
那么 - 請您分享一些關於在存儲庫模式上測試CRUD操作的正確方法的建議嗎?
這是一個ASP.NET MVC應用程序,.NET 4,C#,實體框架4和工作單元/存儲庫模式。
謝謝。
編輯
只是為了澄清一下,這些並不是我所有的單元測試。 我有服務層的單元測試,以及業務規則測試。
如果我的上述存儲庫測試失敗,后者將(並且應該)失敗。 這就是重點測試我的存儲庫的基本操作 。 我錯了嗎?
IMO,你的創建測試應該:
我有很多像你這樣的單元測試,主要區別在於我使用深度比較方法來比較對象實例。 例如,我的U測試看起來像這樣:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.