在我的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。
我能想到的第三个选择是不使用我的Custom Service Locator类而是使用IoC容器(例如Microsoft Unity),然后在IoC容器配置文件中保存一个单例实例并将其注入到依赖类中。
请告诉你最好的选择,为什么。
非常感谢,
谢谢;哪个IoC容器会推荐最佳性能? –
看这里 - http://stackoverflow.com/questions/21288/which-net-dependency-injection-frameworks-are-worth-looking-into –