【问题标题】:How can I replace an already declared stub call with a different stub call?如何用不同的存根调用替换已经声明的存根调用?
【发布时间】:2010-03-18 12:02:35
【问题描述】:

如果我有一个 Rhino Mock 对象,它已经声明了一个存根调用,如下所示:

mockEmploymentService.Stub(x => x.GetEmployment(999)).Return(employment);

无论如何我可以删除这个调用以用不同的东西替换它,例如:

mockEmploymentService.Stub(x => x.GetEmployment(999)).Return(null);

我问的原因是我想设置一些通用模拟以用于多个单元测试,然后允许每个单元测试在必要时调整调用。

【问题讨论】:

    标签: c# rhino-mocks


    【解决方案1】:

    我使用这个扩展方法来清除存根的行为(或模拟的行为+期望):

    public static class RhinoExtensions
    {
        /// <summary>
        /// Clears the behavior already recorded in a Rhino Mocks stub.
        /// </summary>
        public static void ClearBehavior<T>(this T stub)
        {
            stub.BackToRecord(BackToRecordOptions.All);
            stub.Replay();
        }
    }
    

    我是从this other stackoverflow answer 那里得到的,或者可能是this one

    【讨论】:

    • 谢谢 Wim,唯一的问题是它会清除所有存根调用,所以我必须将它们全部重置,而不是仅仅覆盖我感兴趣的那个。
    【解决方案2】:

    我使用Repeat.Once()Repeat.Times(x) 方法,当达到限制时,它将移动到下一个存根\预期。

    【讨论】:

      【解决方案3】:

      我实际上将存根用作接收预期返回的方法。

      private void StubDoSomething(bool expected) => Dbs.Stub(x => x.DoSomething(Arg<string>.Is.Anything, Arg<object[]>.Is.Anything)).Return(expected);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        • 2021-07-26
        • 2017-09-28
        • 2017-09-27
        相关资源
        最近更新 更多