如何在集成测试中访问Castle Fluent NHibernate

时间:2013-11-25 15:57:24

标签: c# fluent-nhibernate castle-windsor

我正在使用Castle Windsor进行IOC和Fluent NHibernate进行ORM。我正在创建集成测试以验证映射和基本功能。如何访问Castle Windsor实例化的对象?

这是我的存储库安装程序:

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

    }
}

这是我的存储库:

public interface IContainerRepository {     IEnumerable GetActiveContainers(); }

公共类ContainerRepository:BaseRepository,IContainerRepository {     public ContainerRepository(ISession session)         :基地(会话)     {     }

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

1 个答案:

答案 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);
}

您的Windsor容器测试可能如下所示:

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