2009-10-07 4 views
1

Как проверить область действия зарегистрированного типа с помощью структурыMap?Тестирование области действия типа structMap

Например, есть реестр:

public class DataRegistry : Registry 
{ 
    public DataRegistry() 
    { 
     ForRequestedType<ISessionManager>().TheDefaultIsConcreteType<SessionManager>().CacheBy(StructureMap.Attributes.InstanceScope.Singleton); 
     ForRequestedType<ISessionRequest>().TheDefaultIsConcreteType<SessionRequest>().CacheBy(StructureMap.Attributes.InstanceScope.HttpContext); 
    } 
} 

И я хочу, чтобы проверить, что ISessionRequest экземпляр сфера является HttpContext. Поэтому у меня есть тест:

[Test] 
    public void Container_AlwaysHas_OneSessionRequestPerHTTPContext() 
    { 
     //Setup 

     //Act 
     ObjectFactory.Configure(r => r.AddRegistry<DataRegistry>()); 

     //Test 
    } 

Но я не знаю, чтобы проверить объем такого типа после его регистрации?

ответ

2

Я считаю, что вы хотите написать тест, подтверждающий, что жизненный цикл зарегистрированного плагина имеет нужный жизненный цикл.

Вы можете проверить модель контейнера. Вот один из тестов, которые вы хотите написать.

[TestFixture] 
public class container_registration 
{ 
    [Test] 
    public void session_request_should_be_scopped_per_httpcontext() 
    { 
     var container = new Container(new DataRegistry()); 

     var plugin = container.Model.PluginTypes.First(p => p.PluginType.UnderlyingSystemType == typeof(ISessionRequest)); 

     plugin.Lifecycle.ShouldBeOfType(typeof(HttpContextLifecycle)); 
    } 
} 
+0

Это выглядит так. Очень важно – JimmyP

+0

Извините, кажется, что LifeCycle больше не является членом PluginTypeConfiguration ... возможно, он устарел или переименован, любые идеи? Cant, похоже, просматривает структуру структуры api docs, либо они все искажены ... – JimmyP

+0

Извините, я забыл упомянуть, что я использовал структуру StructureMap, может быть, это новое свойство? – KevM

0
[TestFixture] 
public class WhenRegisteringItemsInTheIoc 
{ 
    [SetUp] 
    public void Setup() 
    { 
     Given_A_Ioc_Container(); 
     When_Registering_Items_In_The_Ioc(); 
    } 
    private Container _container; 

    private void Given_A_Ioc_Container() 
    { 
     _container = new Container(); 
    } 

    public void When_Registering_Items_In_The_Ioc() 
    { 
     _container.Configure(registry => registry.For<IContext>().HybridHttpOrThreadLocalScoped().Use<Context>()); 
    } 

    [Test] 
    public void Then_Should_Have_A_LifeTime_Of_Hybrid_Http_Or_Thread_Local_Scoped() 
    { 
     IPluginTypeConfiguration plugin = 
      _container.Model.PluginTypes.First(p => p.PluginType.UnderlyingSystemType == typeof (IContext)); 
     Assert.That(plugin.Lifecycle, Is.EqualTo("Hybrid")); 
    } 
} 

В случае, если кто пересмотрит это в будущем, выше тест мы используем, чтобы покрыть этот сценарий. «plugin.Lifecycle» возвращает строку, относящуюся к области действия, которая в этом случае является «гибридной». Если область не определена, возвращается «Переход».