2010-06-09 3 views
3

나는 내 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); 
     } 
    } 
} 

이 방법이 좋은 방법입니까 아니면 세션을 다르게 처리해야합니까?

+0

기술적으로도 모든 단위 테스트 (각 시험 전에 새 구성)에 완전히 깨끗한 상태로 시작하는 것이 더있을 수도 있지만 그렇게, 그 방법에 대한 테스트를 많이 실행하는 데 시간이 너무 오래 걸릴 것입니다 나는 당신의 버전과 매우 비슷한 것을 사용한다. – Paco

답변

1

이것은 꽤 좋아 보이지만 기본 클래스로 만듭니다. Ayende가 어떻게하는지 확인하십시오.

http://ayende.com/Blog/archive/2009/04/28/nhibernate-unit-testing.aspx

+0

이 기본 클래스에서 Ayende는 모든 테스트에 대해 db를 한 번 만듭니다. 나는 이것이 시험 당 한 번하는 것이 더 낫다는 것을 읽었습니다. 이것은 여전히 ​​기본 클래스를 통해 가능합니까? –

+0

방금이 기본 클래스를 구현했으며 사실 아주 좋습니다. 확실히 추천합니다. –

관련 문제