我有一個簡單的標準存儲庫,從數據庫加載一個複合實體。它通過IDbConnection
(我們可以模擬知識庫訪問IDbCommand
,IDbTransaction
,IDataReader
)注入從數據庫中讀取完整實體樹所需的所有依賴關係。單元測試,以驗證存儲庫從數據庫正確加載實體
public class SomeCompositionRootEntityRepository :
IRepository<SomeCompositionRoot>
{
public RecipeRepository(IDbConnection connection) { ... }
public void Add(SomeCompositionRootEntity item) { ... }
public bool Remove(SomeCompositionRootEntity item) { ... }
public void Update(SomeCompositionRootEntity item) { ... }
public SomeCompositionRootEntity GetById(object id) { ... }
public bool Contains(object id) { ... }
}
問題是,我將如何編寫單元測試的這個好方法?如果我想測試一下reposity已經讀取了整個對象樹,並且它已經讀取了它的正確性,我需要編寫一個hughe mock來記錄和驗證樹中每個對象的每個屬性的讀取。這真的是要走的路嗎?
更新: 我想我需要重構我的存儲庫,以便將存儲庫功能和單元測試分解爲更小的單元。這怎麼能做到?
我確定我不想編寫涉及從實際數據庫讀寫數據的單元測試。
對於任何給定的'SomeCompositionRootEntity'我想測試它讀取所有對象和子對象,讀取屬性所需的所有列,正確組裝對象樹,寫入所有對象,寫入所有屬性。由於這棵樹相當複雜,我似乎必須寫出幾個非常龐大而龐大的單元測試。我想要正確的東西嗎? – bitbonk
所有這些功能都是在倉庫的方法中編碼的嗎?如果是這樣,你應該考慮分開測試方法來單獨測試零件。簡單的簡短方法很好。如果此功能是從外部提供的(例如來自關係映射程序),則不應該對其進行詳細測試。 – Arne
我在.NET 2.0中,我不想使用任何第三方ORM。這種功能如何分解? – bitbonk