I use NUnit and Moq to test a class that has some events, and I'm trying to find a better way to check if an event was fired. I came up with this solution, but it looks a little dirty, since I have to create an interface for the test. Anyway, can I do the same with less code or not create an interface?
This is not so bad, but I feel that someone might have a better solution. Any ideas are welcome. Thanks.
[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); }
source share