Я уже некоторое время крутил свои колеса, пытаясь понять, как я могу выполнить модульное тестирование следующего кода. Сначала я собирался использовать Moq, чтобы высмеивать все, но это не включает в себя возможность издеваться над закрытыми классами. Я знаю, что мне нужно абстрагировать вызовы реализации (конфигурации) с помощью интерфейса? но я не могу заставить все это работать правильно.
Код можно изменить, но я бы предпочел, чтобы методы оставались статичными, если только у вас нет веских причин не делать этого. Вы можете добавить интерфейсы или создать любые необходимые швы. Кроме того, GetConnStringByName () может быть реорганизован для возврата соответствующей строки вместо ConnectionStringSettings.
Мысли
namespace Stackoverflow.Rocks
{
/// <summary>
/// Utility class for progmattically selecting values from the Web.config file.
/// </summary>
public class WebConfigStrings
{
//private static Configuration myConfiguration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
/// <summary>
/// Retrieves the desired connection string value based upon the target name.
/// </summary>
/// <param name="connectionStringName">The target connection string referenced in the Web.Config</param>
/// <returns>The value specified in the Web.Config by your connectionStringName</returns>
public static ConnectionStringSettings GetConnStringByName(string connectionStringName)
{
Configuration rootWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
ConnectionStringSettings connString;
connString = rootWebConfig.ConnectionStrings.ConnectionStrings[connectionStringName];
return connString;
}
/// <summary>
/// Retrieves the desired application string value based upon the target name.
/// </summary>
/// <param name="applicationStringName">The target application string referenced in the Web.Config</param>
/// <returns>The value specified in the Web.Config by your applicationStringName</returns>
public static string GetAppStringByName(string applicationStringName)
{
string appString = "";
appString = ConfigurationManager.AppSettings[applicationStringName];
return appString;
}
}
}