Как вы поднимаете событие из Strict Mock в Rhino Mocks? - PullRequest
1 голос
/ 22 марта 2011

Я хочу проверить, что следующий код устанавливает свойство Raised при возникновении события MyEvent:

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 Ответ

1 голос
/ 22 марта 2011

Метод BackToRecord очищает все предыдущие ожидания по умолчанию. Мне действительно нужно было использовать BackToRecord (BackToRecordOptions.None), чтобы поддерживать предыдущее состояние.

...