0
我要測試一個方法,並且除了事實上我無法調用ConfigurationManager.AppSettings,我得到了一切正常。嘲諷ConfigurationManager.Appsettings而不使用Facade方法
我的方法被定義爲
public async Task<IDictionary<string, object>> Action(IDictionary<string, object> context)
{
if (ConfigurationManager.AppSettings[ApplicationUserFromDomainUserKey] == null)
throw new ConfigurationErrorsException(ApplicationUserFromDomainUserKey);
string storedProcedure = ConfigurationManager.AppSettings.Get(ApplicationUserFromDomainUserKey);
if (ConfigurationManager.ConnectionStrings[DbConnectionKey] == null)
throw new ConfigurationErrorsException(DbConnectionKey);
...
}
我在this question看出,使用門面方法的方法將是很好的,但它會污垢我的類實現不使用DI
我也讀過這個intresting article,但這隻適用於Vs企業版,我希望它可以在CI/VS專業版上運行
我使用NUnit的測試和我的測試是
[Test]
public void MissingAppSettingsKey()
{
var pipeline = new RetrieveApplicationUsernamePipelineStep();
var context = new Dictionary<string, object>()
{
[Resources.DomainUser] = "andrea",
[Resources.Domain] = "ifinformatica.net",
[Resources.ApplicationId] = 0
};
Assert.ThrowsAsync<ConfigurationErrorsException>(async() => await pipeline.Action(context));
}
}
附:我還使用了resharper的測試工具,排除我運行微軟單元測試框架
那麼你的問題是什麼? – stuartd
如果你不想注入配置,至少你可以做的事情是讓你的應用程序不使用'ConfigurationManager.AppSettings',而是你選擇的單例,這更適合改變。如果你甚至不想這樣做*,那麼可以[重定向在運行時讀取的'.config'文件](http://stackoverflow.com/questions/6150644/),因爲這是(並且因爲您需要生成文件而絕對不適合進行測試)。 –