2010-04-22 6 views
2

나는 현재 많은 같은 인터페이스를 가지고 다음과 같은 : 코뿔소 모의 객체를 사용코뿔소 모의 객체와 비 설정할 자식 속성을 비웃음

interface IService 
{ 
    void Start(); 
    IHandler ServiceHandler { get; } 
} 

interface IHandler 
{ 
    event EventHandler OnMessageReceived; 
} 

, 그것은 IService을 조롱 할만큼 쉽지만, 그것은 어떤 IHandler 인스턴스를 할당하지 않습니다 ServiceHandler 속성 따라서 테스트중인 메서드에서 이벤트 처리기를 _mockedService.ServiceHandler.OnMessageReceived에 추가하면 'Object reference not set'오류가 발생합니다.

조롱 된 IService 인스턴스에서 ServiceHandler에 값이 할당되도록하려면 어떻게해야합니까?

이 가능성이 코뿔소 모의 객체 (101),하지만 난 그냥에 속도까지 받고 있어요 ...

답변

4
IService service = MockRepository.GenerateStub<IService>(); 
IHandler stubHandler = MockRepository.GenerateStub<IHandler>(); 
service.Stub(s => s.ServiceHandler).Return(stubHandler); 

//assertions 

또는 당신이 당신의 가짜에 기대를 기록해야하는 경우 대신 GenerateMock를 사용할 수 있습니다.

편집 : RhinoMocks의 이전 버전에 대해이 작업을 수행 할 수 있습니다 당신이있어 확장 메서드 구문을 지원하지 않습니다 (나는 불행하게도 사용 붙어있는) RM 3.3 같은데요

MockRepository mocks = new MockRepository(); 
IService service = mocks.CreateStub<IService>(); 
IHandler handler = mocks.CreateStub<IHandler>(); 

using (mocks.Record()) 
{ 
    SetupResult.For(service.ServiceHandler).Return(handler); 
    //setup expectations using Expect.Call 
} 

using (mocks.Playback()) 
{ 
    //assertions 
} 
+0

을 - 3.3 문법에 대한 어떤 아이디어라도 똑같은 것을 달성 할 수 있을까요? – Marcus

관련 문제