C# – tell if a property has been accessed via Rhino Mocks

crhino-mocksrhino-mocks-3.5visual-studio-2008

I have a property in an interface that I have mocked using Rhino Mocks. I want to know if it was accessed in my unit test.

Is there a way to see if the property was accessed via Rhino Mocks?

I found this code here but it does not seem to work:

string name = customerMock.Name;
customerMock.AssertWasCalled(x => {var ignored = x.Name;});

I reproduced this code and I get the following:

Rhino.Mocks.Exceptions.ExpectationViolationException: IAddAddressForm.get_FirstName(); Expected #1, Actual #0..

I would like to use this syntax, but I must be missing something. I am calling it with a stub (not a mock) does that make a difference?

Best Answer

Is there a way to see if the property was accessed via Rhino Mocks?

Yes. You can set up an expectation for the property. If the verification doesn't throw, then you know the property was accessed:

var mocks = new MockRepository();
IFoo foo = mocks.DynamicMock<IFoo>;
// this sets up an expectation that Name is accessed, and what it should return
Expect.Call(foo.Name).Return("John Doe"); 
mocks.ReplayAll()

// test something that uses IFoo here ...

mocks.VerifyAll();  // Throws if foo.Name was not accessed after ReplayAll()

This is all assuming that you want foo.Name to be accessed. If your goal is to verify that it is not accessed, then you should just use StrictMock instead of DynamicMock. A strict mock will throw for any unexpected calls.

Related Topic