我有一个正在测试的对象会引发事件。使用 Rhino Mocks 检查它是否被提出的最佳方法是什么?
我能想到的最好的(我确信它会比这更好):
public void MyCallback(object sender, EventArgs e) { _flag = true;}
[Test]
public void DoSomethingRaisesEvent() {
_flag = false;
using(_mocks.Record()) {
Expect.Call(delegeate { _obj.DoSomething();});
}
using(_mocks.Playback()) {
_obj = new SomethingDoer();
_obj.SomethingWasDoneEvent += new EventHandler(MyHandler);
Assert.IsTrue(_flag);
}
}
最佳答案
我找到了 this article by Phil Haack on how to test events using anonymous delegates
这是代码,直接从他的博客中撕下来,供懒得点击的人使用:
[Test]
public void SettingValueRaisesEvent()
{
bool eventRaised = false;
Parameter param = new Parameter("num", "int", "1");
param.ValueChanged +=
delegate(object sender, ValueChangedEventArgs e)
{
Assert.AreEqual("42", e.NewValue);
Assert.AreEqual("1", e.OldValue);
Assert.AreEqual("num", e.ParameterName);
eventRaised = true;
};
param.Value = "42"; //should fire event.
Assert.IsTrue(eventRaised, "Event was not raised");
}
关于unit-testing - Rhino 模拟,MbUnit : Best way to check if object has raised an event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/149008/