2012-12-17 7 views
1

여기서 설정 방법 :매핑 통합 테스트 NHibernate에 매핑

NHibernate unit test

가 NHibernate.config를 사용

[SetUp] 
public virtual void SetUp() 
{ 
    var mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies(); 
    this.configuration = NHibernateSession.Init(
    new SimpleSessionStorage(), 
    mappingAssemblies, 
    new AutoPersistenceModelGenerator().Generate(), 
    "../../../Northwind.Web/NHibernate.config"); 
} 

이 약간은 외부 의존성을 소개로 사기 아닌가요? 나도 한 NHibernate.config 물건을 프로그래밍 방식으로 만들고 올바른 초기화 메서드를 siganture 전달할 수있을 것 같아요. 나는 정정하고 누군가 설치 중에이 작업을 수행 했습니까? 감사.

답변

3

저는 현재 프로젝트에서 비슷한 접근법을 성공적으로 채택했습니다.

  1. 그것은 훨씬 더 존재하는 데이터베이스 스키마를 사용하지만, 만들 아니에요 및 수출 : 첫 번째는하지 단위하지만 매핑 통합 테스트 외부 자원 즉, 데이터베이스가 포함되어 있기 때문에, 테스트의 실행 시간과 일반적인 기술적 인 문제입니다 언제나 랜덤 스키마 이름으로 구성을 사용하는 nHibernate에서. 이렇게하면 두 명 이상의 개발자가 같은 스키마에서 동시에 통합 테스트를 실행할 가능성이 없어집니다.

    var export = new SchemaExport (configuration); export.Execute (스크립트 : false, 내보내기 : true, justDrop : false, 연결 : databaseConnection, exportOutput : null);

  2. 사용 후이 스키마를 정리해야합니다. 몇 일 안에 디스크 공간 부족 등이 발생하기 쉽습니다.

  3. 테스트 픽스처 실행 시간을 절약하려면이 코드를 {[SetUp]}에서 {[FixtureSetUp] (으)로 이동하십시오. 데이터베이스와의 작업은 일반적인 메모리 내 단위 테스트 시간과 비교할 때 많은 시간이 걸린다.

  4. 이러한 테스트는 develoeprs/CI 서버가 시간과 리소스 소비 때문에 일반적인 단위 테스트와 비교하여 덜 자주 트리거 될 수 있습니다. 내 프로젝트에서는 야간 빌드 또는 수동 트리거 빌드에서만 계획됩니다.

  5. 당신은 런타임에 nHibernate 수 구성을 생성 할 수 있으므로 "../../../Northwind.Web/NHibernate.config은"대신 SQL 서버는 당신이 SQLite는 사용할 수 사용하는

  6. 필요하지 않습니다

  7. 대부분의 경우 매핑은 일반적으로 각 SQL 엔진마다 다릅니다.

+0

감사합니다. sqllite에 5를 (프로그래밍 방식으로)하는 예제를 제공해 주시겠습니까? – cs0815

+0

다음은 [샘플] (https://gist.github.com/4319926)입니다. – Akim

1

테스트 프로젝트에서 다른 NHibernate.Config를 만들거나 그냥 프로젝트의 실제 nhibernate.config에 대한 링크를 추가하기 만하면됩니다 (프로젝트를 마우스 오른쪽 단추로 클릭하고 기존 항목을 추가하고 NHibernate를 찾으십시오). 구성을 클릭하고 추가를 클릭하는 대신 추가 옆의 화살표를 클릭하고 '링크로 추가'를 선택하십시오.

정말 멋진 부분은 NHibernate.Config를 테스트 용으로 사용하고 있습니다.

필자가 과거에 이런 작업을 수행 한 경우 db 마이그레이션 도구를 통해 테스트를 위해 데이터베이스를 특수하게 만들고이를 테스트에 사용했습니다. 생성 된 데이터베이스 세부 정보를 사용하여 테스트 용 구성 파일을 생성하거나 테스트 프로젝트에서 구성과 일치하는 데이터베이스를 생성하십시오.

+0

감사합니다.프로그래밍 방식으로 NHibernate.Config를 만드는 예제를 알고 있습니까? 감사. – cs0815