在RhinoMocks中使用回调触发器
问题描述:
我正在编写使用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”来设置它?请询问如果这还不清楚..
答
只需使用WhenCalled
指定:
fakeSomething = MockRepository.GenerateMock<ISomething>();
fakeSomething
.Stub(x => x.Foo())
.WhenCalled(call => /* do whatever you want */);
,例如,你可以使用呼叫参数的参数属性:
fakeSomething
.Stub(x => x.Foo(Arg<int>.Is.Anything))
.WhenCalled(call =>
{
int myArg = (int)call.Arguments[0]; // first arg is an int
DoStuff(myArg);
});
是不是异步。你很可能不需要它是异步的,如果不是,它会让你的生活更轻松。
谢谢!这听起来就像我正在寻找的功能。圣诞节正在赶上我,所以不得不等待几天才能测试它。等待接受答案,以防我有一些后续问题。再次感谢! – stiank81 2009-12-23 20:40:15
并且不 - 我绝对不希望这在我的测试中是异步的。我嘲笑的功能是异步的,但我会以同步方式伪装 - 这就是为什么当调用模拟函数时需要触发另一个函数调用。 – stiank81 2009-12-23 20:42:59
最后测试它。这正是我需要的!工作正常 - 只需在fakeSomething后添加.Stub(..)。再次感谢! – stiank81 2009-12-28 17:53:25