Как управлять сессиями в модульных тестах NHibernate? - PullRequest
3 голосов
/ 09 июня 2010

Я немного не уверен в том, как управлять сессиями в моих тестовых устройствах nunit.

В следующем тестовом устройстве я тестирую репозиторий.Мой конструктор репозитория использует ISession (поскольку я буду использовать сеанс для каждого запроса в моем веб-приложении).

В моей настройке тестового устройства я настраиваю 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 Ответ

1 голос
/ 09 июня 2010

Это выглядит довольно хорошо, но я бы создал базовый класс.Посмотрите, как Айенде это делает.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...