2011-03-22 61 views
1

我想測試,下面的代碼將引發財產時提出的MyEvent事件:你如何從Rhino Mocks的嚴格模擬中舉辦活動?

public interface IEventRaiser 
{ 
    event EventHandler<Args> MyEvent; 
    void DoSomething(); 
} 

public class EventSubscriber 
{ 
    public EventSubscriber(IEventRaiser raiser) 
    { 
     this.raiser = raiser; 
     this.raiser.MyEvent += EventRaised; 
    } 

    private readonly IEventRaiser raiser; 

    private void EventRaised(object sender, Args args) 
    { 
     raiser.DoSomething(); 
     Raised = true; 
    } 

    public bool Raised {get; private set;} 
} 

我使用以下NUnit測試代碼,但事件似乎從來沒有得到提升。 EventRaised方法從不運行:

[TestFixture] 
public class EventSubscriberTests 
{ 
    private MockRepository mocks; 
    private IEventRaiser raiser; 
    private EventSubscriber target; 

    [SetUp] 
    public void SetUp() 
    { 
     mocks = new MockRepository(); 
     raiser = mocks.StrictMock<IEventRaiser>(); 
     raiser.Expect(r => r.MyEvent += null).IgnoreArguments(); 
     mocks.ReplayAll(); 

     target = new EventSubscriber(raiser); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     mocks.VerifyAll(); 
    } 

    [Test] 
    public void VerifyEventIsSubscribedTo() 
    { 
     raiser.BackToRecord(); 
     raiser.Expect(r => r.DoSomething()); 
     raiser.Replay(); 

     raiser.Raise(r => r.MyEvent += null, raiser, new Args {Property = true}); 

     Assert.IsTrue(target.Raised); 
    } 
} 

如果我沒有在提高事件之前添加額外的期望,這工作正常。但是,我似乎無法使它與它一起工作。我究竟做錯了什麼?

回答

1

BackToRecord方法默認情況下會清除以前的所有預期值。我實際上需要使用BackToRecord(BackToRecordOptions.None)才能保持以前的狀態。