【发布时间】:2011-06-29 22:24:45
【问题描述】:
我正在使用 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);
}
【问题讨论】:
标签: c# unit-testing events nunit moq