2012-01-06 2 views
1

반환 유형이 인터페이스 인 경우 Rhino Mock (v3.6)에서 프록시 유형이 생성되는 이유 이 명시 적으로 반환 값을 지정하지 않으면 (항상 반환 값을 지정해야하지만 다른 발행물)?Rhino Mock의 기본 반환 유형은 무엇입니까?

많은 웹 기사와 심지어 일부 게시물 RhinoMock : Mocks Vs StrictMocks Vs DynamicMocks은 모의 결과가 기본 유형을 반환 할 것이라고 말하면 default(T)이라고 가정합니다. 나는이 행동을 보지 않을 것이다 (아래 참조). 동작을 지정하는 Rhino Mocks Documentation에서 아무것도 찾을 수 없습니다.

반환 유형으로 필수 유형과 클래스를 테스트했으며 (아래와 비슷 함)이 테스트는 모두 예외를 throw합니다. 시도 할 때 반환 값 또는 예외가 필요합니다. 내 Act 코드에서 메소드 호출. 이것은 마음에 들지 않습니다. 그 명백한 것은 틀린 것입니다. Rhino는 '창의적이지 않습니다.'

// Arrange 
IFoo strictMockInstance = MockRepository.GenerateStrictMock<IFoo>(); 
IFoo dynamicMockInstance = MockRepository.GenerateMock<IFoo>(); 

strictMockInstance.Expect(call => call.Bar()); 
strictMockInstance.Replay(); 

dynamicMockInstance.Expect(call => call.Bar()); 
dynamicMockInstance.Replay(); 

// Act 
IResult smResult = strictMockInstance.Bar(); 
IResult dmResult = dynamicMockInstance.Bar(); 

// Assert  
Assert.IsNull(smResult); // none of these results are null, both are proxy instances 
Assert.IsNull(dmResult); 

// .... 
public interface IFoo 
{ 
    IResult Bar(); 
} 

public interface IResult { } 
+0

Offtopic, Expect()/Call()은 소스 코드 주석에서 언급 한 AAA 구문이 아니며, AssertWasCalled() '메소드 대신 – sll

답변

0

이 기능의 뒤에 주된 이유는

다음과 같은 고려 계층 구조 지원 (또는 처리)하는 것입니다

var mock = MockRepository.GenerateMock<ISomeInterface>(); 
mock.Expect(x => x.Document.Header.CreateRow()); 

코뿔소 모의 객체는 것이다 인터페이스를하는 반환 형식을 통해 올 때 모의이 이미 생성되었는지 확인하십시오. 만약 그것이 발견되지 않으면 null 예외를 막기 위해 즉시 생성 할 것입니다.

관련 문제