2013-11-25 54 views
0

我正在使用Castle Windsor進行IOC和Fluent NHibernate的ORM。我正在創建集成測試來驗證映射和基本功能。如何訪問Castle Windsor實例化的對象?如何在集成測試中訪問Castle Fluent NHiberate

這裏是我的倉庫安裝程序:

public class RepositoryInstaller : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     container.Register(
      Component.For<IContainerRepository>().ImplementedBy<ContainerRepository>().LifestylePerWebRequest()); 

    } 
} 

這裏是我的倉庫:

公共接口IContainerRepository { 的IEnumerable GetActiveContainers(); }

公共類ContainerRepository:BaseRepository,IContainerRepository { 公共ContainerRepository(ISession的會話) :鹼(會話) { }

public IEnumerable<Container> GetActiveContainers() 
{ 
    var query = Session.CreateCriteria<Container>() 
     .Add(Restrictions.Eq("ContentsType", "Raw Material")) 
     .Add(Expression.Sql("QTY_IN - QTY_OUT > 0")); 

    return query.List<Container>(); 
} 

}

下面是一個簡單的測試,我想寫:

[Test] 
public void GetActiveTest() 
{ 
    var repo = **DoSomethingHere**.GetInstance<IContainerRepository>(); 
    var list = repo.GetActiveContainers().ToList(); 
    Assert.IsTrue(list.Count > 0); 
} 

回答

0

您正在測試兩個獨立的東西。有一組測試來驗證您的Windsor安裝程序,另一組測試用於驗證您的存儲庫。

測試您的資源庫時,使用適當的測試數據設置您的數據庫,然後創建ContainerRepository實例並調用GetAllContainers方法。正如您知道數據庫中有哪些測試數據,您可以驗證返回的內容是否合適。

[TestFixtureSetup] 
public void Init() 
{ 
    Fluently.Configure() 
      .Database(/* examples here */) 
      .Mappings(...) 
      .BuildSessionFactory(); 
} 

[TestFixtureTeardown] 
public void Cleanup() 
{ 
    // tear down the session here... 
} 

[Test] 
public void GetActiveContainer_Returns_Expected_Containers() 
{ 
    var sut = new ContainerRepository(); 
    var list = sut.GetActiveContainers().ToList(); 
    Assert.IsTrue(list.Count > 0); 
} 

你溫莎容器測試可能會是這個樣子:

[Test] 
public void Build_Returns_Container_With_Resolvable_Repo() 
{ 
    using (container = ContainerBuilder.Build()) 
    { 
     var actualContainerRepo = container.Resolve<IContainerRepository>(); 
     Assert.IsNotNull(actualContainerRepo); 
    } 
} 
+0

,我怎麼把訪問功能NHibernate會議通入ContainerRepository? –

+0

對不起,代碼格式...似乎無法修復它。 –

相關問題