C# 如何在集成测试中访问NHiberate
我用温莎城堡作为国际奥委会的代表,用流利的NHibernate作为ORM的代表。我正在创建集成测试来验证映射和基本功能。如何访问Castle Windsor实例化的对象 这是我的存储库安装程序: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
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);
}
}