[英]Entity Framework 6 and Unit Test
public class ItemsRepository {
public ItemDto Get(int id) {
using (var db = new ItemContext()) {
return db.Items.FirstOrDefault(i => i.Id == id)
.ToDto();
}
}
}
我曾經通過一直到數據庫來測試這段代碼。 我知道這不是一個好習慣,因為在這種情況下的單元測試也測試到數據庫的連接。
理想情況下,我想構建一個內存數據庫並為其播種。 在這種情況下我該怎么做? 如何偽造 ItemContext 以使用內存列表?
請注意,我不想將 Context 作為構造函數公開,因為用戶必須知道數據是如何存儲的。
你不能偽造ItemContext
因為new
關鍵字總是創建對象的新實例。 理想情況下,您應該通過依賴注入來注入您的上下文。 像這樣的東西:
public class ItemsRepository {
public ItemDto Get(int id) {
return _itemContextService.Items.FirstOrDefault(i => i.Id == id)
.ToDto();
}
}
在單元測試中_itemContextService
應該被注入, _itemContextService.Items
應該被配置為模擬數據。 您應該進行單元測試的所有邏輯是:
FirstOrDefault(i => i.Id == id).ToDto();
這只是Get(int id)
方法所做的。 與數據庫的連接超出了單元測試此方法的范圍。
無論如何,如果您不能使用某些 DI 容器或以某種方式注入ItemContext
那么您可以在單元測試項目中模擬您的連接字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.