2012-01-06 8 views
7

Chcę napisać test, który weryfikuje mapowania w zamku windsor. Używam ASP MVC2, gdzie używam windsor zamku do mapowania moich repozytoriów.Testowanie mapowania Windsor Windsor w httpModules nie jest rejestrowane

Czytałem ten artykuł:

http://weblogs.asp.net/bsimser/archive/2008/06/04/the-first-spec-you-should-write-when-using-castle.aspx

i na tej podstawie stworzyłem moje MS test

[TestMethod()] 
     public void GetContainerTest() 
     { 
      MooseMvc.Infrastructure.DependencyInjectionInitialiser target = new MooseMvc.Infrastructure.DependencyInjectionInitialiser(); // TODO: Initialize to an appropriate value 
      IWindsorContainer container = target.GetContainer(); 
      foreach (IHandler assignableHandler in container.Kernel.GetAssignableHandlers(typeof(object))) 
      {    
       container.Resolve(assignableHandler.ComponentModel.Service); 
      } 
     } 

dane dla target.getcontainer() realizuje

this._windsorContainer.Register(Component.For<TInterfaceType>() 
       .ImplementedBy(typeof(TConcreteType)).LifeStyle.PerWebRequest); 

Otrzymuję wiadomość jak upadki:

Looks like you forgot to register the http module 
Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule Add '<add 
name="PerRequestLifestyle" 
type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, 
Castle.Windsor" />' to the <httpModules> section on your web.config. 
If you're running IIS7 in Integrated Mode you will need to add it to 
<modules> section under <system.webServer> 

Odpowiedz

2

miałem ten sam problem i znalazłem rozwiązanie: Możesz zdefiniować zdarzenie w kontrruktorze testu jednostki, aby zastąpić LifestyleType.

void Kernel_ComponentModelCreated(Castle.Core.ComponentModel model) 
{ 
    if (model.LifestyleType == LifestyleType.Undefined) 
     model.LifestyleType = LifestyleType.Transient; 

    if (model.LifestyleType == LifestyleType.PerWebRequest) 
     model.LifestyleType = LifestyleType.Transient; 
} 

public UnitTest1() 
{ 
    containerWithControllers = new WindsorContainer(); 

    containerWithControllers.Kernel.ComponentModelCreated += new ComponentModelDelegate(Kernel_ComponentModelCreated); 
} 
+0

Dzięki! Dokładnie to, czego potrzebowałem. –

+0

Haha, kilka miesięcy później przychodzę do tego samego zagadnienia w innym projekcie i rozwiązuje to dla mnie ponownie. Dzięki! PS Tylko pamiętaj, aby wykonać tę procedurę rejestracji zdarzenia ComponentModel zanim jakikolwiek Instalator lub Rejestr zadzwoni! –

Powiązane problemy