Я пишу использованию модульных тестов 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" настроить это? Спросите, было ли это неясно..
Просто укажите его, используя 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);
});
Это не асинхронно. Скорее всего, вам не нужно, чтобы он был асинхронным, в любом случае это облегчит вам жизнь, если это не так.