簡體   English   中英

您如何從Rhino Mocks的嚴格模擬中引發事件?

[英]How do you raise an event from a Strict Mock in Rhino Mocks?

我想測試引發MyEvent事件時以下代碼是否設置了Raised屬性:

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);
    }
}

如果在發起活動之前我沒有添加額外的期望,則效果很好。 但是,我似乎無法使其兼容。 我究竟做錯了什么?

默認情況下,BackToRecord方法清除所有先前的期望。 我實際上需要使用BackToRecord(BackToRecordOptions.None)來維持先前的狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM