views:

74

answers:

2

Hi, I'm trying to mock the Add method of subsonic SimpleRepository with Rihino mocks, I'm using the IRepository Interface but I'm new to mocking and dont know how to go from there, can this be done? thanks for your help.

+1  A: 

It depends what you want to test. Do you care if the Add() method is called or not, or do you just want to set up a canned response which may or may not be called?

If you expect the call:-

var mocks = new MockRepository();
var repo = mocks.StrictMock<IRepository>():

var myObj = CreateSampleObject(); 

using(mocks.Record())
{
    Expect.Call(repo.Add(myObj)).Return(myObj);
}

using(mocks.Playback())
{
    var target = CreateTarget(repo);
    target.DoSomething(myObj);
}

If you don't care whether it is called or not, then use SetUpResult instead of Expect, e.g.

SetUpResult.For(rep.Add(myObj)).Return(myObj);
AdamRalph
+2  A: 

AdamRalph is correct, but I prefer the AAA syntax of Rhino Mocks:

// arrange
var repo = MockRepository.GenerateStub<IRepository>();
var myObject = CreateSampleObject();
repo.Stub(r => r.Add(myObj)).Return(myObj);

// act (this assumes that the call to "SomeMethod" on "SomeClass"
// returns the result of the IRepository.Add).
var someClass = new SomeClass(repo);
var result = someClass.SomeMethod();

// assert
Assert.AreSame(myObject, result);
Patrick Steele