Используя обратный вызов инициировал с RhinoMocks

Я пишу использованию модульных тестов RhinoMocks для насмешки, и теперь я нуждаюсь в некоторой новой функциональности, которую я не использовал прежде.

Я хотел бы вызвать функцию, которая снова вызовет асинхронную функцию. Для моделирования этого, асинхронная функция заканчивает и инициировала данный обратный вызов с результатом выполнения, я предполагаю, что могу использовать функциональность Обратного вызова в RhinoMocks, но как я делаю это?

В основном то, что я хотел бы сделать, является чем-то вроде этого:

fakeSomething = MockRepository.GenerateMock<ISomething>();
fakeSomething.FictionousFunctionSettingCallback(MyFunctionCalled, MyCallback, theParameterToGiveCallback);
var myObj = new MyClass(fakeSomething);    
myObj.Foo(); 
// Foo() now fires the function MyFunctionCalled asynchronous, 
// and eventually would trigger some callback

Так; существует ли истинная функция, которой я могу заменить этот "FictionousFunction" настроить это? Спросите, было ли это неясно..

7
задан stiank81 23 December 2009 в 14:37
поделиться

1 ответ

Просто укажите его, используя WhenCalled :

fakeSomething = MockRepository.GenerateMock<ISomething>();
fakeSomething
  .Stub(x => x.Foo())
  .WhenCalled(call => /* do whatever you want */);

, например, вы можете использовать свойство Arguments аргумента вызова:

fakeSomething
  .Stub(x => x.Foo(Arg<int>.Is.Anything))
  .WhenCalled(call => 
  { 
    int myArg = (int)call.Arguments[0]; // first arg is an int
    DoStuff(myArg);
  });

Это не асинхронно. Скорее всего, вам не нужно, чтобы он был асинхронным, в любом случае это облегчит вам жизнь, если это не так.

14
ответ дан 6 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: