2009-10-08 228 views
2

我有一個asp.net mvc應用程序,它使用默認的用戶數據庫。這一切都很好,但我想爲它創建一些測試。我有一個測試項目,我馬上偶然發現了一個異常數據庫連接測試失敗

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid. 

但連接字符串可以正常使用(至少在MVC項目的web.config)。我的實體DB訪問邏輯構造函數拋出異常

public ASPNETDBEntities() : 
      base("name=ASPNETDBEntities", "ASPNETDBEntities") 
{ 
    this.OnContextCreated(); 
} 

任何想法? 在此先感謝。

回答

2

問題是,在運行單元測試時,您需要在測試項目的App.config文件中設置連接字符串,以便Entity Framework找到它。但是,如果你在做單元測試,你很可能根本不想訪問數據庫,而是模擬一些虛擬對象來測試。 (如果你的代碼很難做到這一點,你可能需要對代碼進行一些重構...)

第三種可能的情況是,你正在做集成測試,並因此想訪問a真正的分貝時測試 - 但是,它不一定是真實分貝。它可以是具有相同數據庫模式的任何數據庫。我建議設置一個虛擬數據庫,其中包含一些虛擬記錄,您可以針對這些數據執行測試(以及您將測試項目中的連接字符串放在App.config文件中),這些數據不會增長, 「真正的」分貝。

+0

如果是第二段中的場景,上下文實際上被嘲弄,但是您想要利用模擬對象中的基礎對象上下文的屬性,該怎麼辦?你可以在app.config中放置一個模擬連接字符串嗎? – devlord 2013-10-17 00:09:21

+0

@lorddev:我不太清楚你想描述什麼樣的場景,但是如果你不能發送一個「普通」的模擬對象,配置爲當你與它交互時返回你期望的任何對象,那麼你可能還沒有實現你的圖層的清晰分離 - 換句話說,你應該考慮重構你的代碼,以便更容易測試。 – 2013-10-20 19:35:46

+0

我希望能夠在斷開的上下文模擬中訪問ObjectStateManager。發現它是內置於EF中的,並且取決於實際的ObjectContext,如果沒有有效的EF連接字符串,則無法創建該ObjectContext。 – devlord 2013-10-21 19:25:58