How to Use Rhino Mocks/Testing Events

From Wikibooks, the open-content textbooks collection

< How to Use Rhino Mocks
Jump to: navigation, search

Rhino Mocks can be used to test events on interfaces. For example, let's assume an interface that represents a editor view. This might in turn be implemented by an untested, lightweight user control in a WinForms application:

public interface IView
{
  event EventHandler UserClickedSomething;
}

We'll be testing the presenter class of this view. An NUnit test that asserts some action takes place due to this event being raise might look like this:

[Test]
public void UserClickedSomething_Handled()
{
    MockRepository mocks = new MockRepository();
    
    // create the mock
    IView viewMock = (IView)mocks.CreateMock(typeof(IView));

    // indicate that we expect an event handler to be attached.
    // in doing so, we obtain an IEventRaiser instance.
    viewMock.UserClickedSomething += null;
    IEventRaiser raiser = LastCall.IgnoreArguments().GetEventRaiser();

    // we've finished recording.
    mocks.ReplayAll();

    // create our presenter
    Presenter presenter = new Presenter(viewMock);

    // no indication from the user yet.
    Assert.IsFalse(presenter.IsUserAlive);

    // simulate user action by raising event on mocked interface.
    raiser.Raise(viewMock, EventArgs.Empty);

    mocks.VerifyAll();

    // user is known to be alive and kicking.
    Assert.IsTrue(presenter.IsUserAlive);
}
Personal tools
Create a book
  • Add wiki page
  • Collections help