我已经实现了一个 ITimer 接口(interface),因为我想围绕我正在构建的一个使用 System.Timers.Timer 类的类编写一些测试。
因此,当我稍后调用 Timer.Start() 时,序列会继续,我希望 Elapsed 事件发生。
但是,对于我的测试,我想模拟这种行为,因为我不想等待一定的时间让事件发生(我希望它立即发生)。
我试图模拟 Start 方法并让它简单地引发事件,但我不知道如何完成。
这是我目前所拥有的:
var _mock = MockRepository.GenerateMock<ITimer>();
//this is what I'd like to do but it doesn't work
Expect
.Call(_mock.Start())
.WhenCalled( () =>
{
if (_mock.Elapsed != null)
_mock.Elapsed();
});
我遇到的问题是编译器告诉我该事件只能在 += 或 -= 操作的上下文中使用。
必须有一种方法可以使用 Rhino Mocks 来做到这一点,有人知道怎么做吗?
最佳答案
原来我找错地方了。我找到了答案 here .
我需要做的是这些方面的事情:
var _mock = MockRepository.GenerateMock<ITimer>();
_mock.Raise(x => x.Elapsed += null, this, EventArgs.Empty);
关于c# - 调用方法时如何设置事件的期望值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658731/