Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I replace an already declared stub call with a different stub call?

Tags:

c#

rhino-mocks

If I have a Rhino Mock object that has already has a stub call declared on it like this:

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

Is there anyway I can remove this call to replace it with something different e.g.:

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

The reason I ask is that I want to set up some generic mocks to be used in multiple unit tests and then allow each unit test to tailor the calls where necessary.

like image 505
Simon Keep Avatar asked Mar 18 '10 12:03

Simon Keep


3 Answers

I use this extension method to clear the behavior of stubs (or the behavior+expectations of mocks):

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();
    }
}

I picked that up from this other stackoverflow answer, or maybe it was this one.

like image 90
Wim Coenen Avatar answered Nov 17 '22 09:11

Wim Coenen


I use the Repeat.Once() or Repeat.Times(x) methods where it will move on the next stub\expectation when the limit has been reached.

like image 12
Mark Broadhurst Avatar answered Nov 17 '22 09:11

Mark Broadhurst


I actually use the stub as a method that receives the expected return and it works.

private void StubDoSomething(bool expected) => Dbs.Stub(x => x.DoSomething(Arg<string>.Is.Anything, Arg<object[]>.Is.Anything)).Return(expected);
like image 1
luturol Avatar answered Nov 17 '22 09:11

luturol