The*_*ght 1 c# asp.net unit-testing unity-container
我在ASP.NET应用程序中配置了Unity,并在Application_BeginRequest中收到第一个请求时加载配置.然后Unity容器作为属性存储在Global.ascx中,以便我的其他类可以访问它:
public static IUnityContainer ContainerHolder { get; set; }
IUnityContainer IContainerAccessor.Container
{
get { return ContainerHolder; }
}
Run Code Online (Sandbox Code Playgroud)
ContainerHolder,跨应用程序保存容器实例,Container属性允许在每个会话中访问此属性.
然后我有一个UnityLocator类,它允许我跨应用程序访问此属性:
public static class UnityLocator
{
private static IUnityContainer Container
{
get
{
return ((IContainerAccessor)HttpContext.Current.ApplicationInstance).Container;
}
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常!
我还有一种从Unity访问实例的方法:
UnityLocator.GetInstance<IThemeManager>();
protected Repository(ICustomCacheManager customCacheManager)
{
this.Cache = customCacheManager;
}
protected Repository()
: this(UnityLocator.GetInstance<ICustomCacheManager>())
{
}
Run Code Online (Sandbox Code Playgroud)
这已在我的应用程序中使用,以便我可以从Unity检索现有实例,以便我可以将其注入其他类.例如,我的视图(asp.net页面)将此作为依赖项注入其Presenter类.
现在,我想配置我的单元测试运行.
我怎么能这样做?!global.ascx显然不存在,所以我认为我应该创建一个BaseTest类,让我的所有测试都继承它.然后在这个BaseTest类的构造函数中,我构建了我的实例.这是正确的方法吗?
现在如何使用Unity配置单元测试?
谢谢
更新:UnityLocator.GetInstance添加.
您不必担心访问IoC容器.这违反了单元测试.
单元测试你不应该担心任何具体的实现或依赖(除了被测试的类).
对我而言,让您的IoC全球可用是一个糟糕的设计选择.您应该通过属性或构造函数注入依赖项.
| 归档时间: |
|
| 查看次数: |
2042 次 |
| 最近记录: |