我搜索了很多,仍然無法找到一個可靠的解決方案。假設你的應用程序中有方法。此方法使用「System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration」訪問web.config中的某些設置。如果您嘗試測試這些方法,您的測試將失敗,因爲您的測試項目沒有web.config。在.NET中引用Web.Config的測試方法C#
解決此問題的最佳方法是什麼?對於具有簡單配置文件的項目,我通常使用類似這樣的方法作爲外觀方法。
public class Config
{
public static String getKeyValue(String keyName)
{
if (keyName == String.Empty) return String.Empty;
String result = "";
System.Configuration.Configuration rootWebConfig1 =
System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);
if (rootWebConfig1.AppSettings.Settings.Count > 0)
{
System.Configuration.KeyValueConfigurationElement reportEngineKey =
rootWebConfig1.AppSettings.Settings[keyName];
if (reportEngineKey != null)
{
result = reportEngineKey.Value;
}
}
return result;
}
}
每次我試圖爲OpenWebConfiguration()的路徑,我得到了錯誤「相對虛擬路徑是不允許的」
另外請注意,這只是1使這個可測試的方式。這絕不是唯一的方法。還有一些模擬框架可以模擬「靜態」方法,你可以使用其中的一個來模擬你現有的'Config.getKeyValue()'方法,幾乎沒有其他代碼改變。 – CodingWithSpike
我想補充一下,kprobst下面的答案與這個答案是一致的。創建接口,然後使用Moq庫(或另一個模擬框架)來構建'ConfigMock'在此答案中提供的模擬對象。 –
謝謝!它似乎是一個乾淨而可重用的方法。 – Reza