如何在NHibernate单元测试中管理会话?

时间:2010-06-09 15:49:54

标签: nhibernate nunit

我对如何在我的nunit测试装置中管理会话有点不确定。

在下面的测试夹具中,我正在测试一个存储库。我的存储库构造函数接受了一个ISession(因为我将在我的Web应用程序中使用每个请求的会话)。

在我的测试夹具设置中,我配置NHibernate并构建会话工厂。在我的测试设置中,我为每个执行的测试创建一个干净的SQLite数据库。

    [TestFixture]
public class SimpleRepository_Fixture
{
    private static ISessionFactory _sessionFactory;
    private static Configuration _configuration;

    [TestFixtureSetUp] // called before any tests in fixture are executed
    public void TestFixtureSetUp() {
        _configuration = new Configuration();
        _configuration.Configure();
        _configuration.AddAssembly(typeof(SimpleObject).Assembly); 
        _sessionFactory = _configuration.BuildSessionFactory();
    }

    [SetUp] // called before each test method is called
    public void SetupContext() {
        new SchemaExport(_configuration).Execute(true, true, false);
    }

    [Test]
    public void Can_add_new_simpleobject()
    {
        var simpleObject = new SimpleObject() { Name = "Object 1" };

        using (var session = _sessionFactory.OpenSession())
        {
            var repo = new SimpleObjectRepository(session);
            repo.Save(simpleObject);
        }

        using (var session =_sessionFactory.OpenSession())
        {
            var repo = new SimpleObjectRepository(session);
            var fromDb = repo.GetById(simpleObject.Id);

            Assert.IsNotNull(fromDb);
            Assert.AreNotSame(simpleObject, fromDb);
            Assert.AreEqual(simpleObject.Name, fromDb.Name);
        }
    }
}

这是一个好方法还是应该以不同方式处理会话?

1 个答案:

答案 0 :(得分:1)

这看起来很不错,但我会创建一个基类。看看艾恩德是怎么做到的。

http://ayende.com/Blog/archive/2009/04/28/nhibernate-unit-testing.aspx