【问题标题】:Rhino Mocks - Mocking collection with ref/out argumentsRhino Mocks - 使用 ref/out 参数模拟集合
【发布时间】:2012-01-24 09:01:21
【问题描述】:

我仍在学习 Rhino 模拟,并对此有疑问。例如 - 我在模拟界面中有一个函数:


    public interface ISomeObject
    {
      string Name {get; set;}
      int Id {get;set;}
    }

    // This class will be returned as and answer to function call
    public class AnswerObject
    {
        public bool IfError {get;set;}
    }

    // Main interface
    public interface IClass
    {
        AnswerObject FunctionGetCollection(ref ICollection <ISomeObject> ListOfInternalObjects, ref int Number);
    }



如您所见,函数“FunctionGetCollection”将接收作为“ref”传递的 2 个参数并返回另一个类作为“function-answer”。你能帮我存根这个函数吗?我需要能够使用:

  • 函数将返回不同的集合(基于代码而不是参数)
  • 函数将返回不同的 AnswerObject

【问题讨论】:

    标签: c# rhino-mocks


    【解决方案1】:

    语法不是很好。用的不是很频繁,用的是老式的Rhino.Mocks.Constraints

    这段代码设置了一个模拟,将所有引用参数替换为新值。

    AnswerObject answerObject;
    ICollection <ISomeObject> collection;
    int number;
    
    IClass iClassMock = MockRepository.GenerateMock<IClass>();
    iClassMock
      .Stub(x => x.FunctionGetCollection(
        ref Arg<ICollection <ISomeObject>>.Ref(Is.Anything(), collection).Dummy,
        ref Arg<int>.Ref(Is.Anything(), number).Dummy);
      .Return(answerObject);
    

    如果您想保留传递给模拟的值,则需要在 WhenCalled 块中实现这一点:

    iClassMock
      .Stub(x => x.FunctionGetCollection(
        ref Arg<ICollection <ISomeObject>>.Ref(Is.Anything(), null).Dummy,
        ref Arg<int>.Ref(Is.Anything(), 0).Dummy);
      .WhennCalled(call =>
      {
        // reset the ref arguments to what had been passed to the mock
        // not sure if it also works with the int
        call.Arguments[0] = call.Arguments[0];
        call.Arguments[1] = call.Arguments[1];
      })
      .Return(answerObject);
    

    【讨论】:

    • Is.Anything - 给出错误:参数 1:无法从 'method group' 转换为 'Rhino.Mocks.Constraints.AbstractConstraint' (我还在 Arg 参数之前添加了 'ref' 作为功能要求) :( :(
    • 这是正确的答案 - 在两个地方都使用 Is.Anything() 并在 'Arg' 之前添加 'ref' 并且它有效!反正我很接近 :) :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多