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 ". Первый тестовый пример проверяет правильность подсчета, второй тестовый пример попытается поймать исключение.

Мой первоначальный вариант - создать еще один макет, а затем перерегистрировать его перед вторым тестовым примером, но я не думаю, что это лучший способ.

Любые мысли о том, как сгенерировать два разных заглушки, один вызывает действие и другой бросает исключение?

ответ

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

Смежные вопросы