Тестирование nhibernate Castle Windsor отображений в httpModules не зарегистрировано - PullRequest
7 голосов
/ 06 января 2012

Я хочу написать тест, который проверяет сопоставления в замке Виндзор.Я использую ASP MVC2, где я использую замок Виндзор для отображения своих репозиториев.

Я прочитал эту статью:

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

и на основании этого я создалмой тест MS

 [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);
            }
        }

Данные для target.getcontainer () реализуют

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

Я получаю сообщение следующим образом:

 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>

Ответы [ 2 ]

2 голосов
/ 17 сентября 2013

У меня была та же проблема, и я нашел решение: вы можете определить событие в конструкторе модульного теста, чтобы переопределить 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);  
}
1 голос
/ 11 февраля 2012

я нашел прекрасную инструкцию

http://docs.castleproject.org/Windsor.Windsor-tutorial-part-three-a-testing-your-first-installer.ashx

добавить больше нечего ..

...