簡體   English   中英

實體框架 6 和單元測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM