2009-04-29 6 views
0

코드 생성기 (.NetTiers 템플릿이있는 CodeSmith)를 사용하여 모든 DAL 코드를 생성합니다. 내 코드 (비즈니스 계층)에 대한 단위 테스트를 작성하고 이러한 테스트가 매우 느리게 실행되고 있습니다. 문제는 각 테스트마다 데이터베이스를 클린 상태로 재설정한다는 것입니다. 또한 많은 테스트를 수행함에 따라 데이터베이스 작업의 대기 시간이 상당히 지연되는 것으로 보입니다.생성 된 DAL 코드로 단위 테스트

모든 DB 작업은 .NetTiers에서 생성 된 DataRepository 클래스를 통해 수행됩니다. 데이터베이스를 사용하는 대신 메모리 내장 스토리지를 사용하는 모의 데이터 보관소를 생성 (또는 코딩)하는 방법이 있는지 알고 계십니까?

이 방법을 사용하면 실제 코드를 변경하지 않고도 단위 테스트에서이 모의 저장소를 사용하여 속도를 높일 수 있습니다.

답변

3

에 대한 SQL CE를 사용하여 다른 팀을 기억합니다. 본질적으로 새로운 모의 DB 객체가 구현할 수있는 인터페이스를 생성 한 다음 테스트를 실행할 때 DI 프레임 워크가 모의 DB를 삽입하고 앱을 실행할 때 실제 DB를 삽입합니다.

무료로 사용할 수있는 수많은 오픈 소스 라이브러리가 있습니다. C#을 사용하기 때문에 새로운 DI 라이브러리 중 하나는 Ninject입니다. 많은 사람들이 있습니다. 다른 사람과 높은 수준의 설명을 보려면 Wikipedia article을 확인하십시오.

0

일부 단위 테스트는 데이터베이스에서 생성 된 XML에서 가져온 데이터를 사용하여 데이터베이스 액세스를 모의합니다. DAL 클래스는 모두 DI 컨테이너에 저장되기 때문에 모의 클래스로 대체됩니다.

xml의 생성은 사용자 정의 코드입니다.이 오픈 소스 솔루션을 찾으면 나는 그것을 듣고 기쁘게 생각합니다.

편집 스테판의 대답 후 : 내가 종속성 주입 (DI) 및 컨트롤 컨테이너의 반전 (IOC)를 살펴 보자 자신의 테스트 데이터베이스

1

문제 설명에서 테스트에서 비즈니스 및 DAL 및 라이브 데이터베이스를 사용하고 있기 때문에 통합 테스트를 수행하고 있다고 생각합니다.

단위 테스트의 경우, 다른 모든 종속성이 조롱되거나 스터브 된 코드 계층을 처리합니다. 이 접근법을 사용하면 단위 테스트가 모든 증분 코드 변경에 대해 실행 속도가 매우 빠릅니다.

Rhino Mock, Moq, typemock과 같이 다양한 조롱 프레임 워크가 있습니다. (내 프로젝트에서는 Dir 레이어와 유닛 테스트 비즈니스 레이어를 모의하기 위해 Rhino 모의를 사용했습니다.)

Harsha