2012-10-25 3 views
1

현재 단위 테스트를 위해 NHibernate와 메모리의 SQLite 데이터베이스를 사용하는 단위 테스트 프레임 워크가 있습니다. 각 단위 테스트는 자체 세션에서 실행되어 독립성을 보장합니다. 대부분의 경우, 이것은 훌륭하게 작동합니다. 그러나 150 개의 테스트에 가까워지면서 조금 느리게 움직이기 시작합니다. 이것의 주된 이유는 각 테스트에 앞서 데이터베이스에 좋은 데이터 비트를 삽입해야한다는 것입니다.메모리에 미리 채우기 Nhibernate 테스트를위한 SQLite 데이터베이스

기본적으로 내 응용 프로그램은 워크 플로 응용 프로그램이며 워크 플로 (단계 수, 각 단계의 필드 등)에 대한 많은 정보를 데이터베이스에 저장합니다. 이 항목이 없으면 응용 프로그램을 실행할 수 없으므로 테스트에 필요합니다.

각 단위 테스트 전에 데이터베이스를 채우는 데 총 테스트 시간이 약 4 분이 소요됩니다. 이 모집단은 테스트 실행마다 한 번 발생하지만 세션이 닫힐 때 메모리 데이터베이스가 파괴되므로 어떻게해야할지 모르겠습니다. 어떤 제안?

+0

대신 귀하의 저장소를 모의 해보십시오. 테스트에 필요한 엔티티 객체를 반환 할 리포지토리를 가져옵니다. 이것은 매우 빠릅니다. 나는 900 개가 넘는 테스트로 1 분 이내에 잘 작동하는 프로젝트를 가지고 있습니다. –

+0

그럴 수도 있지만 추가 코드가 많이 필요할 것입니다. 데이터베이스를 직접 사용하여 현재 가지고있는 이점은 배포 스크립트와 테스트 설정 코드가 동일하다는 것입니다. 나는 또한 엄격한 저장소 설정으로 귀찮게하지 않았다. 대신 여기에 ayende의 지침을 따른다. http://ayende.com/blog/3955/repository-is-the-new-singleton. 결과적으로 저는 여러 상황에서 직접 ISession과 상호 작용합니다. 물론, 조롱 당할 수있는 단순한 추상화 계층에서는 그리 어렵지 않을 것입니다.하지만 좀 더 간단한 것을 기대했습니다. – AndrewSwerlick

답변

4

미리 채워진 데이터베이스 파일을 가능한 경우 RAM 디스크의 임시 디렉토리에 복사 할 수 있습니다.

또는 SQLite backup API을 사용하여 데이터베이스 내용을 메모리 데이터베이스에 복사 할 수 있습니다.

+0

파일 기반의 sqlite 데이터베이스를 사용해야 할 수도 있습니다. 잠재적 인 솔루션은 이상적이지 않지만. 램 디스크에 있더라도 램 디스크 설정으로 실행하지 않는 팀의 다른 모든 사람들에게도 테스트가 제대로 실행되도록해야합니다. SQLite 백업 API를 살펴 봤지만 SQLite의 C# 라이브러리를 통해 조작 할 수는 없다고 말할 수 있습니다. 반대로 정보가 있다면 그것은 좋을 것입니다. – AndrewSwerlick

+0

System.Data.SQLite [백업 API 지원] (http://stackoverflow.com/questions/11383775/c-sharp-sqlite-memory-stream-as-db). –

+0

멋진데, 나는 오래된 문서를보고 있었음에 틀림 없다. 주말에 이것을 시험해보고 작동하게하면 받아 들일 것입니다. 당신의 도움을 주셔서 감사합니다. – AndrewSwerlick

관련 문제