小编Dus*_*Lau的帖子

使用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);
    }
Run Code Online (Sandbox Code Playgroud)

c# events nunit unit-testing moq

6
推荐指数
1
解决办法
4939
查看次数

标签 统计

c# ×1

events ×1

moq ×1

nunit ×1

unit-testing ×1