2013-07-23 124 views
3

我在我的MVC3應用程序中使用VisualStudio.TestTools進行單元測試。該文件包含/Web.conf自定義配置,其價值"false"我不能用ConfigurationManager.AppSettings["DisableCheckboxes"];在我的控制器得到:使用moq在Web.conf中模擬設置

screenshot web.conf

這對生產效果很好,但不是在單元測試。該值是"null"

result of appsettings

我如何使用框架起訂量在/Web.conf嘲笑的設置?

+0

您可能必須將這些配置設置複製到您的測試項目的配置文件中。測試項目不會訪問該網站的'web.config'。 –

+0

謝謝你的回答,但那並不解決問題 - 相同的行爲:null。 – Simon

回答

7

如果你抽象配置文件讀取,並將這個抽象注入到你的類中,而不是直接使用ConfigurationManager,那麼你最好是。然後爲了測試你可以嘲笑抽象。

創建IConfigurationReader接口:

public interface IConfigurationReader 
{ 
    string GetConfigSetting(string settingName); 
} 

真正實現將使用ConfigurationManager,但對於測試,你可以嘲笑IConfigurationReader

看起來有些過分,但它是一次性工作,可以在整個應用程序中重用。額外的好處是,如果有一天你決定從其他地方讀取配置設置,你只需改變實現,不要觸及你的消費者。

+1

沒有辦法矯枉過正。我花了幾個小時與不同的配置文件作鬥爭,最後決定抽象配置。 – ProfK

+1

一些示例代碼會很好。 – Alan

相關問題