【问题标题】:How to access Castle Fluent NHiberate in Integration Tests如何在集成测试中访问 Castle Fluent NIBerate
【发布时间】:2013-11-25 15:57:24
【问题描述】:

我将 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());

    }
}

这是我的存储库:

公共接口 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);
}

【问题讨论】:

    标签: c# fluent-nhibernate castle-windsor


    【解决方案1】:

    你正在测试两个不同的东西。有一组测试来验证您的 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);
        }
    }
    

    【讨论】:

    • 如何访问 Fluent NHibernate Session 以传递到 ContainerRepository?
    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多