Я немного не уверен в том, как управлять сессиями в моих измерительных приборах nunit.Как управлять сеансами в модульных тестах NHibernate?
В следующем испытательном оборудовании я тестирую репозиторий. Мой конструктор репозитория принимает 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);
}
}
}
Является ли это хорошим подходом или я должен обрабатывать сеансы по-разному?
Технически, это могло бы быть лучше, чтобы начать с абсолютно чистыми на каждом модульном тесте (новая конфигурация перед каждым испытанием), но это займет слишком много времени, чтобы выполнить много тестов по этому пути, так Я использую нечто похожее на вашу версию. – Paco