最小起订量:如何使用非空发件人引发事件
Moq: How to raise an event with non-null sender
考虑这个界面:
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
作为发件人。这是为什么?有没有办法做我真正想做的事?
您可以像下面这样为 SomethingHappened 传递 (object sender,EventArgs e),这会让订阅者知道发件人是您的 IFoo 最小起订量对象
myMock.Raise(x=>x.SomethingHappened += null,myMock.Object, EventArgs.Empty );
假设您使用的是 .Net 4.5
,EventHandler<TEventArgs>
委托的定义发生了变化,请检查 4.5 and 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
形式的标准参数
考虑这个界面:
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
作为发件人。这是为什么?有没有办法做我真正想做的事?
您可以像下面这样为 SomethingHappened 传递 (object sender,EventArgs e),这会让订阅者知道发件人是您的 IFoo 最小起订量对象
myMock.Raise(x=>x.SomethingHappened += null,myMock.Object, EventArgs.Empty );
假设您使用的是 .Net 4.5
,EventHandler<TEventArgs>
委托的定义发生了变化,请检查 4.5 and 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