【问题标题】:Using callback triggers with RhinoMocks在 RhinoMocks 中使用回调触发器
【发布时间】:2010-12-29 12:24:53
【问题描述】:

我正在使用 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”来设置它?请问这是否不清楚..

【问题讨论】:

    标签: c# unit-testing mocking rhino-mocks


    【解决方案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);
      });
    

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

    【讨论】:

    • 谢谢!这听起来就像我正在寻找的功能。圣诞节在这里赶上我,所以我必须等几天才能测试它。等待接受答案,以防我有一些后续问题。再次感谢!
    • 不——我绝对不希望这在我的测试中是异步的。我正在模拟的功能是异步的,但我会以同步的方式伪造它 - 这就是为什么我需要在调用模拟函数时触发另一个函数调用。
    • 终于测试过了。这正是我所需要的!工作正常 - 只需要在 fakeSomething 之后添加 .Stub(..) 。再次感谢!
    • 是的,存根丢失,已修复。
    • 嗨 - 我“几乎”明白了这一点,并认为这正是我在 SL4 应用程序的异步调用中寻找的内容。有机会看到完整的测试方法是什么样的吗?比如什么被用于期望或断言?真的很感激!谢谢!比尔
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多