Использование триггеров обратного вызова с RhinoMocks - PullRequest
7 голосов
/ 23 декабря 2009

Я пишу юнит-тесты, используя 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», чтобы настроить это? Пожалуйста, спросите, было ли это неясно ..

1 Ответ

14 голосов
/ 23 декабря 2009

Просто укажите это, используя 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);
  });

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

...