2009-10-01 3 views
0

클래스가 있습니다. 예 : 예를 들어 기본 클래스에서 상속 된 DerivedClass입니다. BaseClass. BaseClass는 IBaseClass라는 인터페이스를 구현합니다. IBaseClass에는 정수 자동 속성 인 TestProperty라는 1 개의 속성이 있습니다.Rhino Mock mock 상속 된 인터페이스

I PartialMultiMock DerivedClass과 같이 :

derivedClassMock.Expect(d => d.TestProperty).Return(141); 

그러나 나는 다음과 같은 예외가 점점 계속 : : 다음 기대를 설정

derivedClassMock = repository.PartialMultiMock<DerivedClass>(typeof(IBaseInterface)); 

다음과 같이

"잘못된 호출, 마지막 호출이 사용되었거나 호출이 이루어지지 않았습니다. 가상 (C#)/무시 가능 (VB) 메서드를 호출하고 있는지 확인하십시오. "

BaseClass의 TestProperty 구현을 가상으로 표시하면 모든 것이 작동하지만 이것이 필요한 이유를 이해하려고합니다. DerivedClass가 IBaseInterface를 구현했다면 부분 모의 기능을 사용하기 위해 가상으로 표시 할 필요가 없었습니다. (적어도 나는 그렇게 생각하지 않는다 - 내가 틀렸다면 수정하시기 바랍니다) 다음과 같이 그때 조금 더 가서 그에 기대를 IBaseInterface에 멀티 모의 캐스팅 및 설정하려고

:

var derivedInterface = (IBaseInterface) derivedClassMock; 
derivedInterface.Expect(d => d.TestProperty).Return(1); 

이 테스트는 이제 예외없이 실행되지만 TestProperty에서 반환 된 값은 예상대로 1이 아니지만 int의 기본값 인 0입니다. 이것은 나에게 스텁과 비슷한 행동을 제안합니다.

가능한 경우 누군가가 혼란 스러울만큼 조금 더 잘 이해할 수 있도록 설명 할 수 있습니까? 부분적으로 상속 된 인터페이스를 사용하여 클래스를 모의 할 수 없으며 인터페이스에서 기대치를 설정하면 스텁처럼 동작하는 이유는 무엇입니까?

미리 감사드립니다.

답변

4

PartialMultiMock을 실제로 사용하지는 않았지만이 경우에는 "TestProperty"를 자동 속성으로 구현 한 DerivedClass의 반환 값을 스텁하려는 것 같습니다. 이것은 setter가있는 자동 속성이기 때문에이 속성에 대한 스터 빙을 전혀 요구하지 않는다고 생각됩니다.

당신이 그랬다면 무엇 :

var derivedClassMock = MockRepository.GenerateStub<DerivedClass>(); 
derivedClassMock.TestProperty = 146;