Я хочу проверить, что следующий код устанавливает свойство 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);
}
}
Если я не добавлю дополнительное ожидание перед поднятием события, это прекрасно работает. Тем не менее, я не могу заставить его работать с этим. Что я делаю не так?