考虑这个interace:
public interface IFoo
{
event EventHandler SomethingHappened;
}
使用Moq,我模拟了界面,现在我想提出这个事件:
var myMock = new Mock<IFoo>();
myMock.Raise(x => x.SomethingHappened += null, EventArgs.Empty );
这很好用,但问题是订阅者希望发件人是某种东西(实际上引发事件的IFoo)而不仅仅是null。
因此我想提出这样的事件:
myMock.Raise(x => x.SomethingHappened += myMock.Object, EventArgs.Empty );
但编译器不会允许 - 它似乎只接受null
作为发件人。这是为什么?有办法做我真正想要的吗?
答案 0 :(得分:0)
你可以传递(对象发送者,EventArgs e)SomethingHappened,如下所示,这将让订阅者知道发件人是你的IFoo的moq对象
myMock.Raise(x=>x.SomethingHappened += null,myMock.Object, EventArgs.Empty );
答案 1 :(得分:0)
假设您使用的是.Net 4.5
,EventHandler<TEventArgs>
代表的定义发生了变化,请检查4.5和4.0的链接,这可以确保您使用可能无法从IFoo
分配的EventArgs
类型,仍然编译器不会像4.0中那样抱怨,但是其他方面将是Moq框架将事件视为标准委托而不是事件模式,需要调用为:
myMock.Raise(x=>x.SomethingHappened += null,myMock.Object, EventArgs.Empty);
x.SomethingHappened += null
,告诉Moq框架,调用和休息的事件/委托将是object sender, EventArgs e