我正在使用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);
}
答案 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);
}
}