2014-12-31 2 views
0

다음과 같은 경우가 있습니다.RhinoMocks 스텁을 사용하여 값을 반환하면 예외가 발생합니다.

저는 내 서비스 중 하나를 모방하기 위해 RhinoMocks를 사용하고 있습니다. 스텁의 초기 동작은 후속 호출에서 예외를 발생시키려는 호출 횟수를 증가시키는 것입니다 ... 어떻게 그럴 수 있습니까?

내가 현재 무엇을하고 난 TestFixtureSetup 방법 내 테스트의 경우

var mockBLL = MockRepository.GenerateMock<IBLL>(); 

    mockBLL.Stub(x => x.SaveOrUpdateDTO(null, null)).IgnoreArguments().WhenCalled 
       (invocation => 
       { 
        nSaveOrUpdateCount++; 
       }); 

    SimpleIoc.Default.Register<IBLL>(() => mockBLL); 

이를 설정하려고에 호출을 수행 한 후 IOC는 읽을 것이다 나의 목적 중 하나 " SaveOrUpdateDTO "메소드를 호출합니다. 첫 번째 테스트 케이스가 올바른 수를 확인하면 두 번째 테스트 케이스가 예외를 catch하려고 시도합니다.

처음에는 다른 모의를 만든 다음 두 번째 테스트 케이스 전에 다시 등록하는 방법을 사용합니다. 그러나 최선의 방법이라고 생각하지 않습니다.

두 개의 서로 다른 스텁 (하나는 액션을 호출하고 다른 하나는 예외를 던지기)을 생성하는 방법에 대한 의견이 있으십니까?

답변

1

아마도 도움이 될 것입니다. 시도해 볼 수 있습니까?

var mockBLL = MockRepository.GenerateMock<IBLL>(); 

mockBLL.Stub(x => x.SaveOrUpdateDTO(null, null)) 
        .IgnoreArguments() 
        .Repeat.Twice()   // Allow to be called twice 
        .WhenCalled(invocation => 
      { 
       if (nSaveOrUpdateCount > 0) // throw an exception if 2nd invocation 
        throw new Exception(); 

       nSaveOrUpdateCount++; 
      }); 

SimpleIoc.Default.Register<IBLL>(() => mockBLL); 
+0

확인 - 재미있는 방법입니다. 나는 그것을 시도 할 것이다. – aggietech

관련 문제