Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在集成测试中访问NHiberate_C#_Fluent Nhibernate_Castle Windsor - Fatal编程技术网

C# 如何在集成测试中访问NHiberate

C# 如何在集成测试中访问NHiberate,c#,fluent-nhibernate,castle-windsor,C#,Fluent Nhibernate,Castle Windsor,我用温莎城堡作为国际奥委会的代表,用流利的NHibernate作为ORM的代表。我正在创建集成测试来验证映射和基本功能。如何访问Castle Windsor实例化的对象 这是我的存储库安装程序: public class RepositoryInstaller : IWindsorInstaller { public void Install(IWindsorContainer container, IConfigurationStore store) { con

我用温莎城堡作为国际奥委会的代表,用流利的NHibernate作为ORM的代表。我正在创建集成测试来验证映射和基本功能。如何访问Castle Windsor实例化的对象

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

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

    }
}
公共类RepositoryInstaller:IWindsorInstaller
{
public void安装(IWindsorContainer、IConfigurationStore)
{
集装箱。登记(
Component.For().ImplementedBy().LifestylePerWebRequest());
}
}
这是我的存储库:

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

公共类ContainerRepository:BaseRepository、IContainerRepository { 公共集装箱存储(ISession会话) :基本(会话) { }

public IEnumerable GetActiveContainers()
{
var query=Session.CreateCriteria()
.Add(Restrictions.Eq(“内容类型”、“原材料”))
.Add(Expression.Sql(“数量输入-数量输出>0”);
返回query.List();
}
}

下面是我想写的一个简单测试:

[Test]
public void GetActiveTest()
{
    var repo = **DoSomethingHere**.GetInstance<IContainerRepository>();
    var list = repo.GetActiveContainers().ToList();
    Assert.IsTrue(list.Count > 0);
}
[测试]
public void GetActiveTest()
{
var repo=**DoSomethingHere**.GetInstance();
var list=repo.GetActiveContainers().ToList();
Assert.IsTrue(list.Count>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);
    }
}
[测试]
public void Build\u返回\u容器\u和\u可解析\u Repo()
{
使用(container=ContainerBuilder.Build())
{
var actualContainerRepo=container.Resolve();
Assert.IsNotNull(actualContainerRepo);
}
}

如何访问Fluent NHibernate会话以进入ContainerRepository?
[Test]
public void Build_Returns_Container_With_Resolvable_Repo()
{
    using (container = ContainerBuilder.Build())
    {
       var actualContainerRepo = container.Resolve<IContainerRepository>();
       Assert.IsNotNull(actualContainerRepo);
    }
}