Лучший способ модульного тестирования событий с использованием NUnit и Moq?

Я использую NUnit и Moq для тестирования класса, у которого есть некоторые события, и я пытаюсь найти лучший способ проверить, было ли инициировано событие. Я придумал это решение, но оно кажется немного грязным, так как мне нужно создать интерфейс для теста. В любом случае, я могу сделать то же самое с меньшим количеством кода или мне не придется создавать интерфейс?

Это не так уж плохо, но я чувствую, что у кого-то может быть лучшее решение. Любые идеи приветствуются. Спасибо.

[Test]
    public void StartedAndStoppedEventsShouldFireWhenStartedAndStopped()
    {
        var mockStartedEventSubscriber = new Mock<IEventSubscriber>();
        var mockStoppedEventSubscriber = new Mock<IEventSubscriber>();

        _NetworkMonitor.Started += mockStartedEventSubscriber.Object.Handler;
        _NetworkMonitor.Stopped += mockStoppedEventSubscriber.Object.Handler;

        _NetworkMonitor.Start();
        _NetworkMonitor.Stop();

        Func<bool> func = () => { return (eNetworkMonitorStatus.Stopped == _NetworkMonitor.Status); };
        Utilities.WaitUntilTrue(func, _NetworkMonitor.Interval * 2, 10);

        _NetworkMonitor.Started -= mockStartedEventSubscriber.Object.Handler;
        _NetworkMonitor.Stopped -= mockStoppedEventSubscriber.Object.Handler;

        mockStartedEventSubscriber.Verify(h => h.Handler(_NetworkMonitor, EventArgs.Empty), Times.Once());
        mockStoppedEventSubscriber.Verify(h => h.Handler(_NetworkMonitor, EventArgs.Empty), Times.Once());
    }

    public interface IEventSubscriber
    {
        void Handler(object sender, EventArgs e);
    }
6
задан Andy 24 July 2011 в 13:11
поделиться