2013-09-30 7 views
1

Mocked 개체에 기대를 설정하여 메서드가 예상대로 호출되었는지 확인하려고합니다.Expect() 문에서 호출되는 메서드가 왜 생깁니 까?

나는 그것을 성취하기 위해 다음 코드를 사용한다. 그러나

//// Create a mocked object(arrange) 
A controller = MockRepository.GenerateMock<A>(); 
someObject.Stub(x => x.Resolve(typeof(A))).Return(controller); 

//// Act i.e. call the target function where the controller is created 
this._target.InvokePrivateMethod("OnTargetUpdated", false, this, eventArgs); 

//// Assert 
controller.AssertWasCalled(x => x.UpdateTarget(targetInfo2), o => o.Repeat.Once()); 

, 내가 "UpdateTarget는()"메소드의 코드로가는 흐름 호출 된 경우 주장하려고합니다. 간단히 "메소드가 호출 된 경우"를 확인하고 "메소드를 호출하지"않습니다.

+0

나는 물건의 속성을 조롱하고 싶다는 또 다른 사례를 발견하게되었습니다. 이 속성은 실제로 사용자 지정 형식을 반환합니다. 나는 이미 가지고있는 물건의 예를 돌려주고 싶었다. 스텁을 시도/속성을 조롱했을 때 반환 할 개체를 반환하는 대신 사용자 지정 클래스의 프록시 구현을 만들었습니다. – Anee

+0

여기 정확히 무슨 일이 일어나는지 파악하기가 어렵습니다. 명확한 몇 가지 질문 : 'A'란 무엇입니까? 인터페이스입니까? 아니면 수업입니까? 'A'가 클래스이면'UpdateTarget()'_virtual_ method입니까? 문제를 재현하는 전체 예제를 제공 할 수 있습니까? –

+0

@Alexander Stepaniuk 'A'는 클래스이고 메서드는 가상이 아닙니다. 조롱되지 않는 일부 객체를 포함하는이 메서드 내부에 일부 코드가 있으므로이 메서드가 실행될 때 예외가 발생합니다. 그래서,이 메서드가 호출되었는지 확인하고 싶습니다. 이를 재현하려면 단순히 "UpdateTarget"메서드에서 예외를 throw하면됩니다. – Anee

답변

1

방법대로 UpdateTarget()은 가상이 아니기 때문에 Rhino Mock은 호출을 가로 챌 수 없습니다.

그래서 실제 메소드가 대신 실행됩니다.
세부 정보보기 예 : this question.

테스트를 실행하려면 모의 메서드 가상을 만들어야합니다. 또는 클래스 대신 여기에서 인터페이스를 사용하면 더 좋습니다.

+0

아, 너무 안좋아. 어쨌든 고마워. – Anee

관련 문제