轉到內容

如何使用 Rhino Mocks/測試事件

25% developed
來自教科書,面向開放世界的開放書籍

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);
 }
華夏公益教科書