C# 对Rhinomock使用回调触发器

C# 对Rhinomock使用回调触发器,c#,unit-testing,mocking,rhino-mocks,C#,Unit Testing,Mocking,Rhino Mocks,我正在编写单元测试,使用Rhinomock进行模拟,现在我需要一些以前从未使用过的新功能 我想调用一个函数,它将再次调用一个异步函数。为了模拟异步函数完成并使用执行结果触发给定的回调,我假设我可以在Rhinomock中使用回调功能,但是我该如何做呢 基本上我想做的是这样的: fakeSomething = MockRepository.GenerateMock<ISomething>(); fakeSomething.FictionousFunctionSettingCallback

我正在编写单元测试,使用Rhinomock进行模拟,现在我需要一些以前从未使用过的新功能

我想调用一个函数,它将再次调用一个异步函数。为了模拟异步函数完成并使用执行结果触发给定的回调,我假设我可以在Rhinomock中使用回调功能,但是我该如何做呢

基本上我想做的是这样的:

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
fakeSomething=MockRepository.GenerateMock();
虚构的函数设置回调(MyFunctionCalled,MyCallback,参数ToGiveCallback);
var myObj=新的MyClass(fakeSomething);
myObj.Foo();
//Foo()现在启动名为asynchronous的函数myFunctionMyFunctions,
//最终会引发一些回调

所以,;是否有一个真正的函数可以替换这个“虚构的函数”来设置它?请询问这是否不清楚

只需在调用时使用
指定它即可:

fakeSomething = MockRepository.GenerateMock<ISomething>();
fakeSomething
  .Stub(x => x.Foo())
  .WhenCalled(call => /* do whatever you want */);
fakeSomething=MockRepository.GenerateMock();
假货
.Stub(x=>x.Foo())
.whencall(call=>/*想做什么就做什么*/);
例如,可以使用调用参数的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);
  });
fakeSomething
.Stub(x=>x.Foo(Arg.Is.Anything))
.何时呼叫(呼叫=>
{ 
int myArg=(int)call.Arguments[0];//第一个arg是int
多斯塔夫(myArg);
});

它不是异步的。您可能不需要它是异步的,如果不需要,它会让您的生活更轻松。

谢谢!这听起来正是我想要的功能。圣诞节快到了,所以我得等几天才能测试一下。。等待回答,以防我有后续问题。再次感谢!不,我绝对不希望在我的测试中是异步的。我正在模拟的功能是异步的,但我将以同步的方式模拟它-这就是为什么我需要在调用模拟的函数时触发另一个函数调用。最后对它进行了测试。这正是我需要的!工作正常-只需在伪造后添加.Stub(..)。再次感谢!是的,存根丢失了,已经修复。嗨-我“几乎”明白这一点,并且认为这正是我在SL4应用程序的异步调用中寻找的。有机会看到完整的测试方法吗?比如什么被用于期望或断言?非常感谢!谢谢比尔