Ich bin mir ein wenig unsicher, wie ich Sitzungen innerhalb meiner Nunit-Testvorrichtung verwalten soll.
In der folgenden Testvorrichtung teste ich ein Repository. Mein Repository-Konstruktor nimmt eine ISession entgegen (da ich pro Anfrage eine Sitzung in meiner Webanwendung verwenden werde).
In meinem Testvorrichtungs-Setup konfiguriere ich NHibernate und erstelle die Sitzungsfabrik. In meinem Test-Setup erstelle ich für jeden ausgeführten Test eine saubere SQLite-Datenbank.
[TestFixture]
public class SimpleRepository_Fixture
{
private static ISessionFactory _sessionFactory;
private static Configuration _configuration;
[TestFixtureSetUp] // wird aufgerufen, bevor Tests in der Vorrichtung ausgeführt werden
public void TestFixtureSetUp() {
_configuration = new Configuration();
_configuration.Configure();
_configuration.AddAssembly(typeof(SimpleObject).Assembly);
_sessionFactory = _configuration.BuildSessionFactory();
}
[SetUp] // wird aufgerufen, bevor jede Testmethode aufgerufen wird
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);
}
}
}
Ist dies ein guter Ansatz oder sollte ich die Sitzungen anders behandeln?
0 Stimmen
Technisch gesehen wäre es möglicherweise besser, mit einem völlig sauberen Zustand bei jedem Unit-Test zu starten (neue Konfiguration vor jedem Test), aber es würde zu lange dauern, viele Tests auf diese Weise auszuführen, also verwende ich etwas sehr Ähnliches wie deine Version.