I call _mocks.ReplayAll()
, then one or more _mockedObject.AssertWasCalled()
and then _mocks.VerifyAll()
. But it tells me that "This action is invalid when the mock object is in record state".
[Test]
public void SetStateExecuting_Should_Set_State_To_Pause_And_Not_Change_GlobalState_When_GlobalState_Is_Paused()
{
var task = new Task { ID = 1, TimeZone = -660, GlobalState = TaskState.Paused };
_taskDataProvider.Expect(p => p.StateUpdate(task.ID, task.TimeZone, TaskState.Paused));
_mockRepository.ReplayAll();
_manager.SetStateExecuting(task);
_taskDataProvider.AssertWasNotCalled(p => p.GlobalStateUpdate(task.ID,
TaskState.Executing));
_mockRepository.VerifyAll();
}
What is the correct order to call so that these methods work correctly?
Jon Kruger's blog post "How to use rhino mocks documented through tests" has simple examples of everything you can do with rhino mocks methods. He also shows what you can not do which I found very helpful in learning.
As mentioned before, using the Arrange, Act, Assert Syntax with the static constructors is easier to read. The blog post shows examples of both methods.
Here are examples from Jon's sample code:
New syntax:
[Test]
public void You_can_check_to_see_if_a_method_was_called()
{
var stub = MockRepository.GenerateStub<ISampleClass>();
stub.MethodThatReturnsInteger("foo");
stub.AssertWasCalled(s => s.MethodThatReturnsInteger("foo"));
stub.AssertWasCalled(s => s.MethodThatReturnsInteger(Arg<string>.Is.Anything));
}
Old style:
[Test]
public void Calling_virtual_methods_will_call_the_actual_method()
{
var mockRepository = new MockRepository();
var sampleClass = mockRepository.PartialMock<SampleClass>();
sampleClass.Replay();
sampleClass.VirtualMethod("foo").ShouldEqual(3);
sampleClass.VirtualMethodWasCalled.ShouldBeTrue();
sampleClass.AssertWasCalled(c => c.VirtualMethod("foo"));
}