В моем приложении asp.net у меня есть следующий статический класс для обработки строк запроса в моем приложении, от которых зависят некоторые классы:
public static class QueryStringUtil
{
public static int? GetStoreId()
{
return GetId(QueryStrings.StoreId);
}
public static string GetItemCode()
{
return Get(QueryStrings.ItemCode);
}
private static string Get(string queryStringName)
{
return HttpContext.Current.Request.QueryString[queryStringName];
}
private static int? GetId(string queryStringName)
{
var queryString = Get(queryStringName);
int queryStringParsed;
return int.TryParse(queryString, out queryStringParsed) ? (int?)queryStringParsed : null;
}
}
Как лучше всего сделать этот класс тестируемым?
Один из известных мне способов состоит в том, чтобы реорганизовать это и создать вместо этого класс экземпляра синглтона с его интерфейсом и позволить зависимым классам принять интерфейс моего синглтон-класса. Не уверен, что это будет моим лучшим вариантом.
Другой вариант - сделать мой класс обычным классом с интерфейсом, а затем создать одноэлементный класс ServiceLocator, ответственный за хранение экземпляров всех классов, которые должны вести себя как одиночный объект, такой как мой QueryStringUtil, и затем разрешить моему зависимому классу принимать интерфейс на мой IQueryStringUtil.
Третий вариант, о котором я могу подумать, - это не использовать мой класс локатора пользовательских служб, а вместо этого использовать контейнер IoC, например Microsoft Unity, а затем сохранить экземпляр singleton в файле конфигурации контейнера IoC и внедрить его в мои зависимые классы.
Пожалуйста, сообщите ваш лучший вариант и почему.
Большое спасибо,