我目前正在使用框架Fleck,我想模拟界面 Bitmap bmp = new Bitmap(path);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Bmp);
byte[] result = ms.ToArray();
。它有一些IWebSocketConnection
类型的属性,我想提升这些事件。
到目前为止,我没有成功将其提升为像这样的事件:
Action
甚至可以像这样直接调用它:
fleckInterfaceMock.Raise(mock => mock.OnClose += null);
上找不到任何有趣的内容
界面:
fleckInterfaceMock.Object.OnClose();
答案 0 :(得分:1)
请注意,OnClose
和界面中的其他成员实际上不是事件。它们实际上是get
- set
属性,其属性类型恰好是委托类型。
出于这个原因,我认为你不能或不会使用Moq的Raise
。
如果您想要调用:
// desired use
fleckInterfaceMock.Object.OnClose();
要成功,需要get
访问者返回非空Action
。
你可以这样做:
// possible Moq setup
Action a = () => { Console.WriteLine("Testing OnClose."); };
fleckInterfaceMock.Setup(x => x.OnClose).Returns(a);
如果您想要类型的委托组合(这不是真正的事件订阅;我们没有事件):
// desired use
fleckInterfaceMock.Object.OnClose += someAction;
要成功,模拟必须首先容忍get
属性,就像之前一样,其次它必须容忍你set
属性(它将set
到& #34;总和"(1)get
和(2)someAction
返回的内容。
您可以通过多种方式实现这一目标。一种方法很简单:
// possible Moq setup
fleckInterfaceMock.SetupProperty(x => x.OnClose);
只需将OnClose
转换为允许get
和set
的属性,并且会记住set
的内容,并在{get
时返回该值1}}被称为。