나는 내 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