如何使用 Rhino Mocks/測試事件
外觀
Rhino Mocks 可用於測試介面上的事件。例如,讓我們假設一個表示編輯器檢視的介面。這反過來可能由 WinForms 應用程式中未經測試的輕量級使用者控制元件實現
public interface IView
{
event EventHandler UserClickedSomething;
}
我們將測試此檢視的演示器類。斷言由於引發該事件而導致採取某種動作的 NUnit 測試可能如下所示
[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);
}