0
votes

I am using Castle Windsor for IOC and Fluent NHibernate for an ORM. I am creating Integration Tests to verify mappings and basic functionality. How do I get access to an object instantiated by Castle Windsor?

Here is my repository installer:

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

    }
}

Here is my repository:

public interface IContainerRepository { IEnumerable GetActiveContainers(); }

public class ContainerRepository : BaseRepository, IContainerRepository { public ContainerRepository(ISession session) : base(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>();
}

}

Here is a simple test that I would like to write:

[Test]
public void GetActiveTest()
{
    var repo = **DoSomethingHere**.GetInstance<IContainerRepository>();
    var list = repo.GetActiveContainers().ToList();
    Assert.IsTrue(list.Count > 0);
}
1

1 Answers

0
votes

You are testing two seperate things. Have one set of tests to validate your Windsor installer and another to validate your repository.

When testing your repository, set up your database with appropriate test data and then create a ContainerRepository instance and call GetAllContainers method on it. As you know what test data is in the database, you can then verify what is being returned is appropriate.

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

Your Windsor container test might look something like this:

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