J'ai une classe de référentiel qui utilise une session NHibernate pour conserver des objets dans la base de données. Par défaut, le référentiel n'utilise pas une transaction explicite - c'est à l'appelant de gérer. J'ai le test de l'unité suivante pour tester ma plomberie NHibernate:NHibernate - Vider avant d'interroger?
[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);
}
}
Le problème est que la ligne
Assert.AreEqual(3, objects.Length);
échoue au test car la liste d'objet retourné par la méthode GetAll
est vide. Si je vider manuellement la session juste après l'insertion des trois objets, cette partie du test passe. J'utilise le FlushMode par défaut sur la session, et selon la documentation, il est supposé vider avant d'exécuter la requête pour récupérer tous les objets, mais ce n'est évidemment pas le cas. Qu'est-ce qui me manque? Edit: J'utilise Sqlite pour le scénario de test unitaire, si cela fait une différence.