2013-11-25 23 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

对不起,代码格式...似乎无法修复它。 –

相关问题