У меня есть класс репозитория, который использует сеанс NHibernate для сохранения объектов в базе данных. По умолчанию в хранилище не используется явная транзакция - это зависит от вызывающей стороны. У меня есть следующий модульный тест для проверки моей сантехники NHibernate:
[Test]
public void NHibernate_BaseRepositoryProvidesRequiredMethods()
{
using (var unitOfWork = UnitOfWork.Create())
{
// test the add method
TestRepo.Add(new TestObject() { Id = 1, Name = "Testerson" });
TestRepo.Add(new TestObject() { Id = 2, Name = "Testerson2" });
TestRepo.Add(new TestObject() { Id = 3, Name = "Testerson3" });
// test the getall method
var objects = TestRepo.GetAll();
Assert.AreEqual(3, objects.Length);
// test the remove method
TestRepo.Remove(objects[1]);
objects = TestRepo.GetAll();
Assert.AreEqual(2, objects.Length);
// test the get method
var obj = TestRepo.Get(objects[1].Id);
Assert.AreSame(objects[1], obj);
}
}
Проблема в том, что линия
Assert.AreEqual(3, objects.Length);
не проходит тест, поскольку список объектов, возвращаемый методом GetAll
, пуст. Если я вручную сбрасываю сеанс сразу после вставки трех объектов, эта часть теста проходит. Я использую FlushMode по умолчанию в сеансе, и согласно документации, он должен сбрасываться перед запуском запроса для извлечения всех объектов, но это явно не так. Чего мне не хватает?
Редактировать: я использую Sqlite для сценария модульного тестирования, если это имеет какое-либо значение.