2014-01-21 42 views
2

我有以下统一配置:团结PerRequestLifetimeManager单元测试

public static void RegisterTypes(IUnityContainer container) 
    { 
     ... 
     container.RegisterType<IRootDatabaseContext, RootEntities>(new PerRequestLifetimeManager()); 
     ... 
    } 

,一切工作正常。但是,当我也想测试这种方法:

[TestMethod] 
public void AssertUnityConfigAreValid() 
{ 
    using (var container = new UnityContainer()) 
    { 
     UnityConfig.RegisterTypes(container); 
     foreach (var registration in container.Registrations) 
     { 
      container.Resolve(registration.RegisteredType, registration.Name); 
     } 
    } 
} 

当我运行这个测试,我得到一个错误:

InvalidOperationException - Operation is not valid due to the current state of the object.

我怎么能代替LifeTimeManager到单元测试从PerRequestLifetimeManager到另一个?

回答

2

我刚刚找到了这一问题的解决方案:

只需要在测试

UnityConfig.RegisterTypes(container);

var request = new HttpRequest("fake", "https://127.0.0.1", null); 
var respons = new HttpResponse(new StringWriter()); 
var context = new HttpContext(request, respons); 
HttpContext.Current = context; 
这行之前添加以下代码