문제

.NET DAL 클래스를 테스트하기위한 만족스러운 옵션을 찾고 있습니다. DAL 클래스이므로 Ado.net을 사용하여 데이터베이스에 직접 액세스합니다. 현재 나는 테스트를 위해 MSSQL 데이터베이스 인스턴스를 사용하지만, 단위 테스트가 가능한 빨리 실행되어야하므로 메모리 내 솔루션이 이상적이기 때문에 더 빠른 옵션이 무엇인지 궁금했습니다.

또한 Microsoft 플랫폼을 사용할 수 있기 때문에 TSQL에 묶여 있다고 언급해야합니다.

도움이 되었습니까?

해결책

당신이 말한다는 것을 감안할 때 :

또한 Microsoft 플랫폼을 사용할 수 있기 때문에 TSQL에 묶여 있다고 언급해야합니다.

그런 다음 SQLServer Compact Edition을 사용하는 것이 귀하의 요구에 적합 할 수 있습니다. 메모리에서 완전히 작동하지 않지만 Readonly 모드에서 작동 할 수 있습니다 (주 데이터베이스 파일에 편집이 발생하지 않으므로 여러 테스트에서 한 번에 여러 테스트를 사용할 수 있습니다).

몇 가지 gotchas가 있고, 저장된 절차가 지원되지 않으며, 몇 가지 데이터 유형을 번역해야하며 특정 데이터 유형은 단단한 제한 (특히 4000 자만으로 이동할 수있는 Varchar)도 적절하게 지원되지 않습니다.

그럼에도 불구하고 나는 SQLServer Compact Edition을 적절한 결과로 적절한 SQL Server 데이터베이스를 거의 완전히 삭제하는 것으로 사용했습니다.

다른 팁

내가 찾았 어 sqlite 최선의 선택이 되십시오. 그러나 nhibernate를 사용하고 있지만 구성이 0이므로 설정하는 데 SEC 만 소요됩니다. 그러나 이러한 유형의 엔진은 일반적으로 필요한 몇 가지가 부족하다는 것을 알고 있어야합니다 (예 : ADO 제공 업체를 사용하는 경우 테이블 이름에 공간이있을 때 SQLITE가 불어 오는 것).

물론 @topbanana는 "실제"데이터베이스를 사용하지 않는 문제 중 일부에 대해 옳습니다. 그러나 메모리 인 Memory RDBM은 실제로 빠르게 실행하려는 이러한 종류의 테스트에 적합합니다 (예 : 증분 또는 CI 빌드에 대한 체크인 테스트).

또 다른 큰 장점은 설정 또는 중단에 대해 걱정할 필요가 없다는 것입니다. 개발자가 DEV 데이터베이스를 파산했기 때문에 체크인 실패를하는 것은 매우 비생산적입니다. ;-)

제작과 같은 단위 테스트에 동일한 데이터베이스를 사용하는 것이 좋습니다. 라이브 문제를 디버깅 할 때 발에서 당신을 촬영하는 이상한 차이가 필요하지 않습니다.

nhibernate 용 대형 단위 테스트 스위트를 살펴보면 SQL Server (디스크 기반)를 사용하고 테스트가 놀랍게도 빠르게 실행됩니다. SQL Server가 최적화되지 않은 평균 단위 테스트 세트보다 훨씬 더 많은 테이블 생성 / 삭제가 진행되고 있다는 것이 훨씬 더 인상적입니다.

Windows에 Ramdisk를 마운트 할 소프트웨어가 있다고 들었습니다 (URL을 기억할 수 없음).

그것에 대한 테스트 데이터베이스를 만드는 것은 흥미로울 수 있습니다.

SQL Server입니다 진짜 단위 테스트의 병목 현상?

내말은:

  1. SQL 프로파일 러와 같은 단위 테스트를 프로파일 링 했습니까? 그들은 모두 느립니다. 약간 느리나요? 왜요?
  2. 단위 테스트가 너무 많은 일을하고 있습니까? 설정 및 분해 코드가 너무 무겁습니까?
  3. SQL이 병목 현상 인 경우 조롱 프레임 워크, 그래서 당신은 모든 SQL 호출을 조롱합니다.

나는 Oracle과 비슷한 도전이 있었고 우리는 다음을 수행했습니다.

  • 실제 단위 테스트가 DB에 닿지 않았지만 대신 서비스에 모의를 사용했는지 확인했습니다.

  • HSQLDB 또는 H2 또는 메모리 데이터베이스에서 실행될 수있는 테스트와 실제로는 Oracle이 필요한 DB 테스트 태그가 지정되었습니다. 그래서 우리는 그것들을 별도로 실행할 수 있습니다.

  • 실제로 Oracle 기능을 사용한 테스트를 통해 RAM 디스크에서 실행되는 일반적인 Oracle 인스턴스를 사용했습니다.

이로 인해 테스트가 상당히 빨라졌습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top