2010-01-09 4 views
2

Rhino Mocks가 원래 Unit Testing 용으로 설계 되었기 때문에 아침 내내 어려움을 겪었습니다.Rhino Mock을 사용하여 코드 및 사용자 인터페이스를 개발할 때 사용할 메모리 내장 데이터베이스를 만듭니다.

그러나 저는 웹 사이트의 기능처럼 인증 및 '블로깅'을 처리하는 재사용 가능한 몇 가지 백엔드 구성 요소를 보유하고 있으며 각 구성 요소에는 자체 데이터 액세스 계층이 있습니다. 사용자 인터페이스를 개발하는 동안 나는 데이터베이스 및/또는 XML 파일에서 테스트 데이터를 작성하는 것을 망설이고 싶지 않습니다.

저는 데이터 액세스 인터페이스 (IBlogRepository)를 구현합니다. 예를 들어 디버깅 세션 (일명 인 메모리 데이터베이스)의 수명 내내 싱글 톤으로 실행하여 일부 데이터를 표시 할 수 있습니다 상대로 디자인.

희망이 맞습니다! 모든 의견은 크게 감사하겠습니다.

제이슨

+1

그럼 뭐가 문제입니까? – Graviton

답변

3

실제로 하드 코딩 된 더미 데이터를 반환하여 IBlogRepository 인터페이스의 테스트 구현을 작성, 모의을 사용하지 마십시오.

+0

안녕 데이비드, 처음부터 내 백업 계획이었습니다. 코뿔소가 나를 위해 가짜 데이터로드를 생성하여 약간의 시간을 절약하는 것이 좋았을 것입니다! 회신 할 시간을내어 주셔서 감사합니다. –

+0

그런데 NBuilder를 살펴보세요. 많은 데이터를 만들고 싶다면 도움이 될 것입니다. –

2

싱글 톤은 변경하기가 어렵 기 때문에 테스트 가능성이 있습니다. 당신은 당신이 소요되는 클래스로 IBlogRepository 인스턴스를 주입하는 의존성 삽입를 사용하여 오프 더 나은 것 :

public class MyClass 
{ 
    private readonly IBlogRepository repository; 

    public MyClass(IBlogRepository repository) 
    { 
     if(repository == null) 
     { 
      throw new ArgumentNullException("repository"); 
     } 

     this.repository = repository; 
    } 

    // use this.repository in other members 
} 

공지 방법 가드 ​​클로스 함께 readonly 키워드 보장과 IBlogRepository 인스턴스는 항상 사용할 수있다.

이렇게하면 Rhino Mock 또는 다른 동적 모의 라이브러리를 사용하여개의 IBlogRepository를 소비 클래스에 삽입 할 수 있습니다.

+0

안녕하세요 마크, 실제로 모든 레이어에 의존성 주입을 위해 구조 맵을 사용하고 있습니다. 나는 네가 한 말에 완전히 동의한다. 내가 뭘 하려는지 동적으로 응용 프로그램 런타임에서 UI를 설계하는 동안 페이지에 표시된 일부 더미 데이터를 볼 수있는 인터페이스의 구현을 만드는 것입니다. 분명히 더 쉽게 보이는 것처럼 나는 David의 반응과 함께 갈 가능성이 더 많다고 생각한다. 회신 할 시간을내어 주셔서 감사합니다. –

+0

예, 그렇다면 통합 테스팅의 일종으로 가장 낮은 레이어를 Test Double로 바꾸고 싶습니다. 그런 경우 David M이 제안한 Fake가 최선의 선택입니다.하지만 더 많은 노력이 필요할 수도 있습니다. 그런 다음 실제 IBlogRepository 구현을 사용하지 않는 이유를 스스로 물어보고 통합 테스트를 시스템 테스트? –

관련 문제