문제

코드 생성기 (.nettiers 템플릿이 포함 된 코드 메스)를 사용하여 모든 DAL 코드를 생성합니다. 코드 (비즈니스 계층)에 대한 단위 테스트를 작성 하고이 테스트는 실행하기가 매우 느려지고 있습니다. 문제는 각 테스트마다 깨끗한 상태를 갖도록 데이터베이스를 재설정한다는 것입니다. 또한 많은 테스트를 수행 할 때 데이터베이스 작업의 대기 시간이 약간 지연되는 것으로 보입니다.

모든 DB 작업은 a를 통해 수행됩니다 DataRepository .nettiers에 의해 생성 된 클래스. 데이터베이스를 사용하는 대신 메모리 내 스토리지를 사용하는 모의-다타 레오이터를 생성 (또는 직접 코딩) 할 수있는 방법이 있는지 알고 있습니까?

이런 식으로, 나는이 모의 저장소를 내 단위 테스트에서 사용하여 실제로 현재 코드로 아무것도 변경하지 않고 속도를 높일 수 있습니다!

도움이 되었습니까?

해결책

의존성 주입 (DI) 및 제어 용기 (IOC)의 역전을 살펴보십시오. 기본적으로 새 모의 DB 객체가 구현할 수있는 인터페이스를 만들면 DI 프레임 워크가 테스트를 실행할 때 모의 DB와 앱을 실행할 때 실제 DB를 주입합니다.

당신이 당신을 도울 수있는 수많은 무료 및 오픈 소스 라이브러리가 있습니다. 당신이 C#에 있기 때문에, 새롭고 다가오는 DI 도서관 중 하나는 새끼. 다른 많은 사람들도 있습니다. 이것을 확인하십시오 위키 백과 기사 다른 사람과 높은 수준의 설명을 위해.

다른 팁

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

단위 테스트를 위해, 당신은 다른 모든 종속성을 가진 하나의 코드 계층을 조롱하거나 스튜브로 처리합니다. 이 접근법을 사용하면 단위 테스트는 모든 증분 코드 변경마다 실행하는 데 실제로 빠릅니다.

Rhino Mock, MOQ, TypeMock과 같은 다양한 조롱 프레임 워크가 있습니다. (내 프로젝트에서 나는 Rhino Mock을 사용하여 DAL 레이어 및 단위 테스트 비즈니스 계층을 분리하여 조롱합니다)

하샤

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

XML의 생성은 사용자 정의 코드입니다. 이에 대한 오픈 소스 솔루션을 찾으면 기쁘다.

Stefan의 답변 이후 편집 : 나는 다른 팀을 사용하여 기억합니다. SQL CE 테스트 데이터베이스의 경우

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